【发布时间】:2013-07-23 15:20:55
【问题描述】:
我有 NSData 对象存储数据(非字符/非 ascii)。我试图将它放入一个数组而不将其解释为字符或 ascii。我知道这个问题之前已经被问过几次了,但是在这种情况下,发布的解决方案都没有对我有用。我试图避免使用属性列表,这是大多数答案所建议的。我已经尝试将 NSData 转换为 NSString,然后将字符串存储在数组中,但是当然,无论我使用什么编码,在将其放入字符串后它都会被解释为字符。例如,其中一个 NSData 包含值 2c,当我将其放入字符串时,它被解释为 ,。有谁知道我如何将原始数据以原始状态存储在 NSArray 中?也许通过将数据存储在用户默认值中,然后以某种方式将默认值存储在数组中?我很茫然。
这里是一些可能相关的代码:
NSData *receivedData = [bleDevice readData];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
[dataArray insertObject:receivedDataString atIndex:0];
当我打电话时:
[dataArray insertObject:receivedDataString atIndex:0];
它将存储 2c 和 , 之类的内容。
但是,当我尝试插入原始数据时,例如:
[dataArray insertObject:receivedData atIndex:0];
它根本不会存储任何东西。没有警告,没有错误。我将 NSLog 数组,它是空的。
【问题讨论】:
-
请发布示例代码。 NSArray 包含指针,因此不应更改对象。
-
没问题,刚刚更新了。
-
[dataArray insertObject:receivedData atIndex:0];肯定会将“receivedData”插入“dataArray”(只要两者都存在)。 “receivedData”可以是任何类型的 NSObject——不必是字符串。如果在记录时数组为“null”,则数组本身永远不会被创建。 -
究竟什么是空?请分享 nslog 语句及其输出。数组在哪里分配和初始化以及如何分配和初始化?
-
(但请记住,如果“receivedData”对象是可变的,那么它可以在插入后进行更改,并且这些更改将出现在数组中。)跨度>
标签: objective-c cocoa-touch nsarray nsdata