1

我有 NSMutableArray 喜欢:

NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil];
NSLog(@"%@",x.description);

从描述中我得到以下结果:

(
    a,
    b,
    c,
    d
)

我想再次从描述中重新创建数组是否可能?

4

2 回答 2

6

没有办法在所有情况下都可靠地工作。例如,您无法知道是否

(
    123
)

表示包含字符串或数字的数组。

补充:实际上一种方法可以将描述转换回数组对象(但由于上述原因,它并不总是返回相同的数组)。description方法NSArrayNSDictionary 使用旧式 ASCII 属性列表格式,可以使用以下 方式读取NSPropertyListSerialization

NSArray *a1 = @[@"123", @456];
NSString *desc = [a1 description];

NSData *d = [desc dataUsingEncoding:NSUTF8StringEncoding];
NSArray *a2 = [NSPropertyListSerialization propertyListWithData:d
                                                        options:0
                                                         format:NULL
                                                          error:NULL];
NSLog(@"%@", a2);
NSLog(@"a1[1] is a %@", [a1[1] class]);
NSLog(@"a2[1] is a %@", [a2[1] class]);

输出:

(
    123,
    456
)
a1[1] 是一个 __NSCFNumber
a2[1] 是一个 __NSCFString

如您所见,数组a2看起来像,但最初是 aa1的第二个元素已被读回为 a 。456NSNumberNSString

所以你应该description只用作调试工具。其他答案和评论中提到了创建可逆人类可读描述或存档的更好方法。

于 2013-05-28T04:08:53.233 回答
1

虽然可以,但这不是 NSLog() 存在的原因。NSLog 的目的是为开发者提供一个简单的错误记录机制。

您应该阅读其他存储数据的方法:

  • 通过 NSData 保存到文件。
  • 使用核心数据
  • NSCoder
  • 各种 JSON 序列化器/解析器。
  • 等等

但如果你真的想要,你可以手动解析一个日志文件。(也许使用 NSRegularExpressions、NSScanner 等)

于 2013-05-28T04:12:00.200 回答