【问题标题】:How to convert NSArray to NSData?如何将 NSArray 转换为 NSData?
【发布时间】:2009-08-17 04:56:22
【问题描述】:

谁能告诉我如何将NSArray 转换为NSData?我有一个NSArray。我需要将它发送到NSInputStream。为此,我需要将NSArray 转换为NSData

请帮帮我,我被困在这里了。

【问题讨论】:

    标签: iphone


    【解决方案1】:

    使用 NSKeyedArchiver(这是 Garrett 帖子链接的最后一句):

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
    

    注意array 中的所有对象都必须符合NSCoding 协议。如果这些是自定义对象,那么这意味着您需要阅读 Encoding and Decoding Objects

    请注意,这将创建一个相当难以阅读的属性列表格式,但可以处理非常广泛的对象。如果你有一个非常简单的数组(例如字符串),你可能想要使用 NSPropertyListSerialization,它会创建一个更简单的属性列表:

    NSString *error;
    NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
    

    如果您希望它在网络上可读,也可以传递一个 XML 格式常量。

    【讨论】:

      【解决方案2】:

      在一些相关的说明中,以下是将 NSData 转换回 NSArray 的方法:

      NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
      

      【讨论】:

      • 确保它是 NSKeyedUnarchiver 而不是 NSKeyedArchiver。使用自动完成时很容易犯错误。
      • 这个答案,加上从上面选择的答案应该足以归档/取消归档任何兼容的对象到/从 NSData
      【解决方案3】:

      我使用了这个代码。

       NSError *error;
       NSMutableData *jsonData = [[NSJSONSerialization dataWithJSONObject:yourDemoArray
                                                                         options:0 // Pass 0 if you don't care about the readability of the generated string
                                                                           error:&error] copy];
      

      【讨论】:

        【解决方案4】:

        斯威夫特:

        let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
        print(data)
        

        【讨论】:

          【解决方案5】:

          你可以这样做-

          NSArray *array= [NSArray array];
          NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
          

          【讨论】:

            【解决方案6】:

            请在 iOS 9+ 中使用:

            NSArray *array = [[NSArray alloc] init];
            NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
            

            旧版本在 iOS 8 中已弃用。

            【讨论】:

              【解决方案7】:

              斯威夫特 5

              let data = try! NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: true)
              

              【讨论】:

                猜你喜欢
                • 2011-12-07
                • 2011-08-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多