/ / NSMutableArrayは、最後のオブジェクトのみを返すたびに-objective-c、ios、cocoa-touch

NSMutableArrayは、最後のオブジェクトのみを毎回返します。 - objective-c、ios、cocoa-touch

私は1つのアプリケーションを開発しています。そのiamでは、データベースデータを格納するためにNSMutableArrayを使用しています。データベースからこの配列にデータを取得した後。そのデータに対して検索操作を実行しています。その間、その配列が最後のオブジェクトのみを返すたびに。ただし、データベースからデータを取得するときに、さまざまなデータを取得します。それで、これを解決する方法を教えてください。私のコードの一部を以下に示します。

 -(void)searchData
{
list=[db getlanguages];

for(for i=0;i<[list count];i++) {
databasefields *dbfield = [list objectAtIndex:i];
NSLog(@"%@",dbfield.lang);
}


}

このコードリストにはNSMutableArrayがあります。そのメモリを割り当てます。そして、そのプロパティをstします。

[dbgetlanguages]のコードは以下のとおりです。

 -(NSMutableArray*)getlanguages
{
NSString *query = [NSString stringWithFormat:@"SELECT * FROM A"];
sqlite3_stmt *stStatement;
NSMutableArray *getdata = [[NSMutableArray alloc]init];
if(sqlite3_prepare_v2(dbfile, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK)
{
databasefields *dbfields=[[databasefields alloc]init];
while (sqlite3_step(stStatement)==SQLITE_ROW)
{
dbfields.num=sqlite3_column_int(stStatement, 0);
dbfields.lang=[NSString stringWithUTF8String:(char*)sqlite3_column_text(stStatement, 1)];
[getdata addObject:dbfields];
[dbfields release];
}

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

sqlite3_close(dbfile);
return getdata;
}

回答:

回答№1の場合は3

次の行を変更します

 for(for i=0;i<[list count];i++) {

 for(int i=0;i<[list count];i++) {

試してみてください。

編集

単一のオブジェクトを使用していて、それもリリースしています。

次のようにステートメントを作成します。

if(sqlite3_prepare_v2(dbfile, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK)
{
databasefields *dbfields = nil;
while (sqlite3_step(stStatement)==SQLITE_ROW)
{
dbfields = [[databasefields alloc]init];
dbfields.num=sqlite3_column_int(stStatement, 0);
dbfields.lang=[NSString stringWithUTF8String:(char*)sqlite3_column_text(stStatement, 1)];
[getdata addObject:dbfields];
[dbfields release];
}

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

回答№2の場合は1
for(for i =0 ?

あなたはループに2つのforを入れていますか?

for i すべきである int i


回答№3の場合は0

これを試して:

-(void)searchData {

for(databasefields *dbfield in [db getlanguages]) {
NSLog(@"%@",dbfield.lang);
}
}

それでも配列内のすべての項目が繰り返されない場合は、[dbgetlanguages]で配列に何が入れられているかを確認する必要があります。

探すべきもの:

  • 毎回同じオブジェクトを追加する
  • 正しい配列を返さない

あなたのコードを見ずに、あなたの問題が何であるかを推測するのは難しいです。おそらくそのいくつかを追加し、私はこの答えを更新することができます。