NSArray描述,反之亦然

时间:2013-05-28 03:58:13

标签: iphone ios objective-c

我有NSMutableArray,如:

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

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

(
    a,
    b,
    c,
    d
)

我想再次从描述中重新创建数组吗?

2 个答案:

答案 0 :(得分:6)

在任何情况下都无法可靠地运作。例如,你不知道是否

(
    123
)

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

已添加:实际上将描述转换回数组对象的方法(但由于上面给出的原因,它并不总是返回相同的数组)。 descriptionNSArray的{​​{1}}方法 使用Old-Style ASCII Property Lists格式,可以使用NSDictionary

来阅读
NSPropertyListSerialization

输出:

(
    123,
    456
)
a1[1] is a __NSCFNumber
a2[1] is a __NSCFString

如您所见,数组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]); 看起来像a2,但第二个元素a1最初是456,已被回读为{ {1}}。

因此,您应该仅将NSNumber用作调试工具。在其他答案和评论中已经提到了创建可逆的人类可读描述或存档的更好方法。

答案 1 :(得分:1)

当你可以时,这不是NSLog()存在的原因。 NSLog的目的是为开发人员提供一种简单的错误记录机制。

您应该阅读storing data的其他方法:

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

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