我有一个数组项QtyArray,我将其存储在SQLITE表中As:
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];
BUt我在线上收到异常
myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:data2];
由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:
'-[__NSCFData objectForKey:]: unrecognized selector sent to instance
请告诉出了什么问题
NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:array];
相反,你应该通过NSDictionary
NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
或
要将通用数组转换为NSData,您需要一个归档器!如果您知道如何馈送NSData,就知道如何使用NSKeyedArchiver。因此:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
当然,数组中的所有元素都需要实现NSCoding协议