我有 NSMutableArray 喜欢:
NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil];
NSLog(@"%@",x.description);
从描述中我得到以下结果:
(
a,
b,
c,
d
)
我想再次从描述中重新创建数组是否可能?
我有 NSMutableArray 喜欢:
NSMutableArray *x=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d", nil];
NSLog(@"%@",x.description);
从描述中我得到以下结果:
(
a,
b,
c,
d
)
我想再次从描述中重新创建数组是否可能?
没有办法在所有情况下都可靠地工作。例如,您无法知道是否
(
123
)
表示包含字符串或数字的数组。
补充:实际上有一种方法可以将描述转换回数组对象(但由于上述原因,它并不总是返回相同的数组)。description
方法NSArray
和NSDictionary
使用旧式 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 。456
NSNumber
NSString
所以你应该description
只用作调试工具。其他答案和评论中提到了创建可逆人类可读描述或存档的更好方法。
虽然可以,但这不是 NSLog() 存在的原因。NSLog 的目的是为开发者提供一个简单的错误记录机制。
您应该阅读其他存储数据的方法:
但如果你真的想要,你可以手动解析一个日志文件。(也许使用 NSRegularExpressions、NSScanner 等)