我有NSMutableArray,如:
NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil];
NSLog(@"%@",x.description);
从描述中我得到以下结果:
(
a,
b,
c,
d
)
我想再次从描述中重新创建数组吗?
答案 0 :(得分:6)
在任何情况下都无法可靠地运作。例如,你不知道是否
(
123
)
表示包含字符串或数字的数组。
已添加:实际上是将描述转换回数组对象的方法(但由于上面给出的原因,它并不总是返回相同的数组)。 description
和NSArray
的{{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的其他方法:
但是如果你真的想要,你可以手动解析一个日志文件。 (或者使用NSRegularExpressions,NSScanner等)