2013-05-28 79 views
1

我的NSMutableArray這樣的:NSArray的以描述,反之亦然

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

從我得到了以下的結果說明:

(
    a, 
    b, 
    c, 
    d 
) 

我想再次重新從描述數組是有可能?

+1

看看JSON。 – Kevin

+0

@Kevin它不是json – Krishnabhadra

+0

其實你真正的目標是什麼?從現有數組獲取新數組? – Krishnabhadra

回答

6

沒有辦法,將可靠地工作在所有情況下。例如,可以不知道,如果

(
    123 
) 

表示包含字符串或數字的陣列。

加了:有實際上所述描述轉換回陣列對象的方法(但它並不總是返回一個相同的陣列,用於上面給出的原因)。的NSArrayNSDictionarydescription方法使用Old-Style ASCII Property Lists格式可使用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] is a __NSCFNumber 
a2[1] is a __NSCFString 

正如你可以看到,該陣列a2看起來像a1,但是第二元素456,這是一個NSNumber原來,一直讀回爲NSString

所以,你應該用description僅作爲調試工具。更好的方法來創建一個可逆的人類可讀的描述或歸檔已經在其他的答案和評論被提及。

+0

是的。這是答案。 – Krishnabhadra

1

雖然你可能,這不是原因的NSLog()存在。 NSLog的目的是爲開發人員提供一個簡單的錯誤記錄機制。

你應該讀入的storing data其他方式:

  • 通過保存NSData的提交。
  • 使用核心數據
  • NSCoder
  • 各種JSON串行器/分析器。

但是,如果你真的想,你可以手動分析日誌文件。 (隨着NSRegularExpressions也許,NSScanner等)