-5
NSmutableAray를 sqlite 데이터베이스의 데이터로 채우려고합니다.NSMutableArray가 채워지지 않습니다
ItemShow 클래스 :있는 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];
동일한 구조가 잘 작동 :
@interface ItemShow : NSObject
{
NSInteger itemID;
NSString *itemYear;
NSInteger rarity;
NSString *mintage;
NSInteger availability;
NSInteger quality;
NSString *mintMark;
NSString *masterMark;
NSString *dateCode;
NSString *dateDescription;
}
게터가/세터 dbaccess를 클래스에 확인
방법입니다 다른보기에서,하지만 지금은 범위 밖의 오류 빈 배열을 제공합니다.
- 선택 작품을 선택했다 무엇. SQLiteStudio에서 확인하십시오.
- itemID가 int이고 뷰가 제목을 얻는 것처럼 이전 뷰에서 올바르게 표시됩니다.
[dataArr count]가 1이면 배열이 비어 있지 않습니다. 결과가 둘 이상일 것으로 예상 했습니까? –
다른 내 소식을 읽어보십시오. 1보다 많아야합니다. – NCFUSN
@ Nathan, 왜 둘 이상이어야합니까? 귀하의 SQL 문이 한 행 ('WHERE itm.itemID = % i')을 반환하도록 설계되었으며, 한 항목을 가져 오는 것처럼 보입니다. 나는 문제를 보지 못한다. ... – joerick