NSArray来描述​​,反之亦然

我有NSMutableArray像:

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

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

 ( a, b, c, d ) 

我想再次从描述中重新创build数组可能吗?

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

 ( 123 ) 

表示包含string或数字的数组。

补充:实际上一种方法将描述转换回数组对象(但由于上述原因,它并不总是返回相同的数组)。 NSArrayNSDictionarydescription方法使用可以使用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等)