2012-01-08 4 views
-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를 클래스에 확인

방법입니다 다른보기에서,하지만 지금은 범위 밖의 오류 빈 배열을 제공합니다.

  1. 선택 작품을 선택했다 무엇. SQLiteStudio에서 확인하십시오.
  2. itemID가 int이고 뷰가 제목을 얻는 것처럼 이전 뷰에서 올바르게 표시됩니다.
+2

[dataArr count]가 1이면 배열이 비어 있지 않습니다. 결과가 둘 이상일 것으로 예상 했습니까? –

+0

다른 내 소식을 읽어보십시오. 1보다 많아야합니다. – NCFUSN

+1

@ Nathan, 왜 둘 이상이어야합니까? 귀하의 SQL 문이 한 행 ('WHERE itm.itemID = % i')을 반환하도록 설계되었으며, 한 항목을 가져 오는 것처럼 보입니다. 나는 문제를 보지 못한다. ... – joerick

답변

-3

혼자서 해결했습니다. 방금 새로운 방법을 만들었습니다. 이제 작동합니다.

관련 문제