5

このエラーが発生します:[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty arrayデータベースに75個のアイテムがありますが。なぜこのエラーが表示されるのですか?データベースからアイテムを取得しようとしていますが、インデックス0が表示されます。

+(NSMutableArray *)GetAttitudeItems
{
    NSArray *arrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *strDestPath = [NSString stringWithFormat:@"%@/ItemsAndCategory.sqlite",[arrDocPath objectAtIndex:0]];


//sqlite3 *sqlite;

NSMutableArray *arrItemsList;
if(sqlite3_open([strDestPath UTF8String],&database)==SQLITE_OK)
{

    const char *strQuery = "SELECT * FROM Items WHERE CategoryName='ATTITUDE' ORDER BY RANDOM()";
    NSLog(@"The value is %s",strQuery);
    sqlite3_stmt *stmt;
    //char *err;

    arrItemsList  = [[NSMutableArray alloc]init];

    if(sqlite3_prepare_v2(database, strQuery , -1,&stmt, NULL)==SQLITE_OK)
    {
        while (sqlite3_step(stmt)==SQLITE_ROW) 
        {

            NSString *StrCatename = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)];
            NSString *StrItemName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 0)];

            Itemslist *itemlist = [[Itemslist alloc]init];
            itemlist.CategoryValue = StrCatename;
            itemlist.ItemValue =StrItemName;
            [arrItemsList addObject:itemlist];

        }

    }

    if (stmt!=nil)
    {
        sqlite3_finalize(stmt);
    }
}



sqlite3_close(database);

return arrItemsList;

}

4

1 に答える 1

2

DB呼び出しでデータが返されると確信している場合は、if()else()ステートメントの少なくとも1つが実際にヒットしていることを確認します。それ以外の場合、上記で初期化した場合、配列は空になります。

NSMutableArray *arrAlert = [[NSMutableArray alloc]init];

自分自身をチェックする簡単な方法elseは、チェーンの最下部にステートメントを追加し、if elseそこに何かをアサートすることです(つまり、初心者のために、少なくとも何かを印刷します)。

于 2012-07-02T07:00:41.450 に答える