NSMutableArray не будет заполняться - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь заполнить NSmutableAray данными из базы данных sqlite.

ItemShow class:

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

геттеры / сеттеры в порядке

Метод в классе DBAccess:

-(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;
}

код в ViewDidLoad

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, и представление получает его правильно из предыдущего представления, как будто оно получает заголовок.

1 Ответ

0 голосов
/ 17 января 2012

Разрешил это сам. Просто сделал новый метод. Теперь это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...