NSKeyedArchiver无法归档阵列

时间:2011-12-03 17:16:38

标签: objective-c ios nsmutablearray nsdata

我正在尝试开发Cydia调整,但现在我遇到了一些问题。

我想复制一个NSMutableArray,所以我使用:

myArray = %orig;
NSMutableArray* myArray2;
myArray2 = myArray;
NSData* data = [NSKeyedArchiver archivedDataWithRootObject: myArray2];

(原始函数返回了一个NSMutableArray,所以我使用myArray =%orig;来获取它)

但是,似乎archivedDataWithRootObject不起作用,它总是导致我的设备崩溃。

那么,archivedDataWithRootObject是否有任何限制?我不知道原始的NSMutableArray是否编码。我可以将archivedDataWithRootObject用于编码的NSMutableArra吗?

感谢您的任何建议和回复

1 个答案:

答案 0 :(得分:0)

我不理解您的代码中的这行代码:

  

myArray =%orig;

我无法理解你为什么要这样做:

  

NSMutableArray * myArray2;
  myArray2 = myArray;

如果您有NSArray或NSMutableArray,您将能够使用该行代码直接编码:

NSData* data = [NSKeyedArchiver archivedDataWithRootObject: myArray2];

但是(总是如此......)
NSArray中的商店是什么? 如果你得到custom object,他们必须实施NSCoding协议才能参与存档舞蹈。

最后你说:

  

我想复制一个NSMutableArray,所以我使用:

如果您只想复制NSMutableArray,可以执行此操作:

[[NSMutableArray alloc] initWithArray:anArray];

我仍然没有在那里获得%标志 如果你需要向它添加新对象,为什么不简单,比如创建新对象。如果它是您自己的对象,您有两个选择:
首先,你在那些对象上实现NSCopying协议,使它们表现得像你想要的那样,或者 第二种选择:如果数组包含一种类型的对象,您可以为这些对象创建一个Class方法:newObjectWithArray:(* NSArray)theArray,在该方法中,您alloc init对象初始化为接收对象的价值。