如何从iOS中的sqlite DB中恢复和存储NSArray

我有一个数组itemQtyArray,我存储在SQLITE表中作为:

NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:self.itemQtyArray]; NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ORDERTABLE(ITEMDESC,ITEMQTY)VALUES( \"%@\",\"%@\");",dataString2,toData]; 

然后我检索为:

  const void *itemQty = sqlite3_column_text(statement, 2); NSInteger qtyBytes = sqlite3_column_bytes(statement, 2); NSData *data2 = [NSData dataWithBytes:itemQty length:qtyBytes]; NSArray *myArrayFromDB = [[NSArray alloc]init]; myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:data2]; [self.itemQtyArray addObjectsFromArray:myArrayFromDB]; 

我在线上遇到exception

  myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:data2]; 

由于未捕获的exception’NSInvalidArgumentException’终止应用程序,原因:

  '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 

请告诉我哪里错了

 NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:array]; 

而不是这个你应该通过NSDictionary

 NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:dictionary]; 

要么

o将通用数组转换为NSData,需要一个归档器! 如果您知道如何提供NSData,您就知道如何使用NSKeyedArchiver。 所以:

 NSArray* array= ... ; NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array]; 

当然,arrays中的所有元素都需要实现NSCoding协议