2012-01-19 3 views
1

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

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

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


} 

このコードリストでは、NSMutableArray.Iはそのメモリを割り当てます。そして、その物件のための財産。

[db getlanguages]のコードは次のとおりです。

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

コードを表示 "getlanguages" –

+0

上記のコードに問題はないようです。問題は '[db getlanguages]'の中にあると思う。 '[リスト数]'はどうですか? –

+0

"list"を記録しようとしましたか? –

答えて

3

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

に次の行

for(for 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); 
    } 
} 
+0

使用しません。同じ結果です。 – user1157838

+0

私は私の答えを編集しました。 'if'ブロックを置き換えてください。 – Ilanchezhian

+0

getdataのためにメモリを割り当てる必要がありますか? – user1157838

1
for(for i =0 ? 

次の2つを入れている:あなたは、単一のオブジェクトを使用して、あなたは次のようにあまりにも..

があなたの文を作ることを発表しているということです

編集

のためのループですか?それはあなたの配列内のすべてのアイテムを反復しない場合、あなたは[デシベルgetlanguagesで配列に入れられているかどうか確認する必要があります

-(void)searchData { 

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

for iint i

+0

は – user1157838

+0

を与える – Shubhank

+0

のNSLogは私が値を知るために必要な... object.For [リスト・カウント]私はそれが何であるかを知っているオブジェクト – user1157838

0

これを試してみなければなりません]。探すために

もの:

  • たび
  • はあなたのコードを見ることなく、正しい配列

を返さない同じオブジェクトを追加し、あなたの問題が何であるかを推測するのは難しいです。おそらくそれを追加して、私はこの答えを更新することができます。

+0

は、IAMが、すでにあなたがそれをした際に1 – user1157838

+0

申し訳ありませんが、私が入力されていなければならないことを私のcode.Seeを投稿してください。 @ Aadhiraの答えは良いようですが、getlanguagesメソッドの最後の行として 'return [getdata autorelease];'を使う必要もあります。 – unsynchronized