NSMutableArray不会填满

问题描述:

我想用sqlite数据库中的数据填充NSmutableAray。NSMutableArray不会填满

ItemShow类:

@interface ItemShow : NSObject 
{ 
NSInteger itemID; 
NSString *itemYear; 
NSInteger rarity; 
NSString *mintage; 
NSInteger availability; 
NSInteger quality; 
NSString *mintMark; 
NSString *masterMark; 
NSString *dateCode; 
NSString *dateDescription; 
} 

getter/setter方法是DBACCESS类确定

方法:在viewDidLoad中

-(NSMutableArray*)getItemsOverView:(int)itemID 
{ 
NSMutableArray *itemsArray=[[[NSMutableArray alloc]init]autorelease]; 
const char *sqlItems=sqlite3_mprintf("SELECT itm.itemID,itm.itemYear,itm.rarity,itm.mintage,iaval.availability as avalibility,iaval.quality as quality,itm.Mintmark,itm.masterMark,dc.dateCode,dc.dateDescription\ 
            from items as itm\ 
            join itemAvailability as iaval on iaval.itemID=itm.itemID\ 
            join dateCultures as dc ON dc.dateCultureID=itm.dateCulture\ 
            WHERE itm.itemID=%i",itemID); 
sqlite3_stmt *statement; 
int sqlResult = sqlite3_prepare_v2(database, sqlItems, -1, &statement, NULL); 
if (sqlResult== SQLITE_OK) 
{ 
    while (sqlite3_step(statement) == SQLITE_ROW) 
    { 
     ItemShow *itemShow=[[ItemShow alloc]init]; 
     itemShow.itemID=sqlite3_column_int(statement, 0); 
     char *itemYear=(char *)sqlite3_column_text(statement, 1); 
     itemShow.rarity=sqlite3_column_int(statement, 2); 
     char *mintage=(char *)sqlite3_column_text(statement, 3); 
     itemShow.availability=sqlite3_column_int(statement, 4); 
     itemShow.quality=sqlite3_column_int(statement, 5); 
     char *mintMark=(char *)sqlite3_column_text(statement, 6); 
     char *masterMark=(char *)sqlite3_column_text(statement, 7); 
     char *dateCode=(char *)sqlite3_column_text(statement, 8); 
     char *dateDescription=(char *)sqlite3_column_text(statement, 9); 

     itemShow.itemYear=(itemYear)?[NSString stringWithUTF8String:itemYear]:@""; 
     itemShow.mintMark=(mintMark)?[NSString stringWithUTF8String:mintMark]:@""; 
     itemShow.masterMark=(masterMark)?[NSString stringWithUTF8String:masterMark]:@""; 
     itemShow.mintage=(mintage)?[NSString stringWithUTF8String:mintage]:@"Unknown"; 
     itemShow.dateCode=(dateCode)?[NSString stringWithUTF8String:dateCode]:@""; 
     itemShow.dateCode=(dateDescription)?[NSString stringWithUTF8String:dateDescription]:@""; 

     [itemsArray addObject:itemShow]; 
     [itemShow release]; 

    } 
    sqlite3_finalize(statement); 
} 
else 
{ 
    [self dbConnectionError]; 
} 

return itemsArray; 
} 

代码

DBAccess *dbAccess=[[DBAccess alloc]init]; 
self.dataArr=[dbAccess getItemsOverView:itemID]; 
    // ItemShow *itmShow=[dataArr objectAtIndex:1]; 
NSLog(@"%d",[dataArr count]); //returns 1. So, empty array 
[dbAccess closeDataBase]; 
[dbAccess release]; 

相同的结构工作正常在其他视图中,但现在它给出了错误 - 空的数组越界。

什么检查

  1. 选择的作品。在SQLiteStudio中检查它
  2. itemID是int,并且视图从前一个视图正确地获取它,就像它获取标题一样。
+2

如果[dataArr计数]是1,那么该数组不是空的。你是否期待不止一个结果? – 2012-01-08 23:41:54

+0

阅读我的其他今天发布。它必须不止1 – NCFUSN 2012-01-08 23:45:22

+1

@Nathan,为什么它必须不止一个?它看起来像你的SQL语句被设计为返回一行('WHERE itm.itemID =%i'),并且你得到一个项目。我没有看到问题... – joerick 2012-01-09 00:12:23

已经自己解决了。刚刚提出了新的方法。现在它可以工作