NSArray来描述,反之亦然
我有NSMutableArray像:
NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil]; NSLog(@"%@",x.description);
从描述中我得到了以下结果:
( a, b, c, d )
我想再次从描述中重新创build数组可能吗?
在任何情况下都无法可靠地工作。 例如,你不知道是否
( 123 )
表示包含string或数字的数组。
补充:实际上有一种方法将描述转换回数组对象(但由于上述原因,它并不总是返回相同的数组)。 NSArray
和NSDictionary
的description
方法使用可以使用NSPropertyListSerialization
读取的旧式ASCII属性列表格式:
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
看起来像a1
,但是原来是NSNumber
的第二个元素456
已经被读回为NSString
。
所以你应该只使用description
作为一个debugging工具。 在其他答案和评论中已经提到了更好的方法来创build一个可读的人类可读的描述或档案。
尽pipe你可以 ,但这不是为什么NSLog()存在。 NSLog的目的是为开发人员提供一个简单的错误logging机制。
您应该阅读其他存储数据的方法 :
- 通过NSData保存到文件。
- 使用核心数据
- NSCoder
- 各种JSON序列化器/parsing器。
- 等等
但是,如果你真的想,你可以手动parsing一个日志文件。 (用NSRegularExpressions或NSScanner等)