iOS在NSobject中保存sqlite选择

时间:2015-05-08 09:11:19

标签: ios sqlite varchar nsobject

我的sqlite有问题。我有一个带有2个varchars的select并将其保存在一个对象中。当我试图获取数据时,我的varchars中只有一个具有我想要的字符串。另一个是NSBlockVariable或nil。

调试sqlite3,它运行良好,它返回我需要的完美。 这两个变量是:名称和商店

product.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)];
product.store = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)];

NSLog(@"name: %@", [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)]);
NSLog(@"store: %@", [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)]);

我明白了:

//name: Sunglasses
//store: RayBan

我有一个像这样创建的对象:

@interface ProductsCart : NSObject
@property (nonatomic, assign) NSInteger idtrans;
@property (nonatomic, assign) NSInteger idproduct;
@property (nonatomic, assign) NSInteger idstore;
@property (nonatomic, assign) NSString *name;
@property (nonatomic, assign) NSString *store;

这就是我在DAO课程中保存它的方法:

NSMutableArray *productList = [[NSMutableArray alloc] init];
while(sqlite3_step(sqlStatement) == SQLITE_ROW)
{
    ProductsCart *product = [[ProductsCart alloc] init];
        product.idtrans = sqlite3_column_int(sqlStatement, 0);
        product.idproduct = sqlite3_column_int(sqlStatement, 1);
        product.idstore = sqlite3_column_int(sqlStatement, 2);

        product.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)];

        product.store = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)];

        [productList addObject:product];
    }

在我的Cart类中,我有一个表,这就是我获取每行信息的方式:

在viewdidload中

self.products= [dao getProductList];

在cellForRowAtIndexPath

ProductsCart * productCart=[self.products objectAtIndex:[indexPath row]];

int idtrans=[[[self.products objectAtIndex:[indexPath row]] valueForKey:@"idtrans"] intValue];
NSString* name=[[self.products objectAtIndex:[indexPath row]] valueForKey:@"name"];   
NSString* store=[[self.products objectAtIndex:[indexPath row]] valueForKey:@"store"];

此时:

  • name是一个NSMutableString,它包含“太阳镜”
  • store是一个NSObject,它必须是一个字符串

我在模拟器上检查了存储的数据库,行是完美的,所以问题不在它上面。

如果我更改保存数据的顺序(存储在product.name中的product.name和name中):

product.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)];
product.store = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)];

这就是我得到的:

  • name是NSMutableString,它包含“RayBan”
  • store是一个NSObject,它必须是一个字符串

在商店里,有时候我会

store   __NSCFString *  @"star.count.singular"  0x00007fae62068e40

我该如何解决这个问题?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

我解决了它将sqlite响应保存到NSDictionary中...我不知道为什么如果我使用它不起作用的课程