簡體   English   中英

如何在iOS中從sqlite DB檢索和存儲NSArray

[英]How to Retrive and Store NSArray from sqlite DB in iOS

我有一個數組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];

但是我在行上遇到異常

    myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:data2];

由於未捕獲的異常“ 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];

當然,數組中的所有元素都需要實現NSCoding協議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM