如何在 iOS 中从 sqlite DB 检索和存储 NSArray [英] How to Retrive and Store NSArray from sqlite DB in iOS

查看:64
本文介绍了如何在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆