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];
相同的结构工作正常在其他视图中,但现在它给出了错误 - 空的数组越界。
什么检查
- 选择的作品。在SQLiteStudio中检查它
- itemID是int,并且视图从前一个视图正确地获取它,就像它获取标题一样。
答
已经自己解决了。刚刚提出了新的方法。现在它可以工作
如果[dataArr计数]是1,那么该数组不是空的。你是否期待不止一个结果? – 2012-01-08 23:41:54
阅读我的其他今天发布。它必须不止1 – NCFUSN 2012-01-08 23:45:22
@Nathan,为什么它必须不止一个?它看起来像你的SQL语句被设计为返回一行('WHERE itm.itemID =%i'),并且你得到一个项目。我没有看到问题... – joerick 2012-01-09 00:12:23