如何在 iOS 中从 sqlite DB 检索和存储 NSArray [英] How to Retrive and Store NSArray from sqlite DB in iOS
本文介绍了如何在 iOS 中从 sqlite DB 检索和存储 NSArray的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数组 itemQtyArray,我将它存储在 SQLITE 表中:
I have an array itemQtyArray which i am storing in SQLITE table 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];
但是我在线时遇到异常
myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:data2];
由于未捕获的异常NSInvalidArgumentException"而终止应用,原因:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[__NSCFData objectForKey:]: unrecognized selector sent to instance
请告诉我哪里出了问题
推荐答案
NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:array];
你应该通过 NSDictionary 来代替这个
instead of this you should pass NSDictionary
NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
或
要将通用数组转换为 NSData,您需要一个存档器!如果您知道如何提供 NSData,您就知道如何使用 NSKeyedArchiver.所以:
o convert a generic array to an NSData, you need an archiver! If you know how to feed the NSData, you know how to use NSKeyedArchiver. So:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
当然你数组中的所有元素都需要实现 NSCoding 协议
Of course all elements in your array needs to implement NSCoding protocol
这篇关于如何在 iOS 中从 sqlite DB 检索和存储 NSArray的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文