2012-03-31 4 views
0

SQLiteデータベースには次の値があります。ArrayとMutableArrayにオブジェクトを保存する

列1は------列2

"1" ------- "One" 

"2" -------"Two" 

"3" -------- "Three" 

など。

今、私はすべてのこれらの値を読み、NSArrayNSMutableArrayなどにそれを保存する必要があります。しかし、私上記の配列の1つに格納すると、データの順序が変わるべきではありません。それはデータベース内にあったままでなければなりません。

私の質問は、データの順序を変更せずに保存する必要があることです。それはNSArrayまたはNSMutableArrayですか?

クエリは単純なSelect Allステートメントになります。

FMResultSet *results = [db executeQuery:@"SELECT * FROM PersonTable"]; 


     while([results next]) 
     { 

      Name *nam= [[Name alloc] init]; 

      nam.fname= [results stringForColumn:@"fname"]; 
      nam.lname= [results stringForColumn:@"lname"]; 

      [mutArray addObject:nam]; 
     } 

     [db close]; 

    }else { 
     NSLog(@"DB Close"); 
    } 

最後に、私はMutableArrayを返すことになるが、この場合には、データのmutArray

答えて

1

あなたは、配列を作成するために使用するコードは罰金です:それは彼らが受け取った順序で、必要な値とNSMutableArrayを作ります。 NSMutableArrayは、あなたがそれを変更するには何かをしない限り、順序は保持されますのでは、NSSetと違っコレクションを命じています。

をしかし、私は、上記のアレイの1つに保存したときにデータの順序は変更しないでください。

は、私はあなたがこのことで何を意味するかによって少し混乱しています。それはデータベース内にあったままでなければなりません。明らかに

あなたがNSArrayを使用している場合、それは不変なので、その配列の内容と順序は変更されることはありません。 NSMutableArrayを取って不変にしたい場合はNSArray *immutableCopy = [mutArray copy]とすれば設定されます。

あなたがNSMutableArrayを使用した場合でもそれでも、あなたのアプリケーションの実行中に、アレイは、理由もなく自分自身を修正するために起こっているようではないです。 addObject:removeObjectAtIndex:およびsortUsingDescriptors:のような呼び出しで配列を突然変異させるための明示的な呼び出しを行わない限り、配列は変更されません。

+0

私のコードは大丈夫だとおっしゃったのですが、何も変更しないでください。 – Illep

+0

または、 'copy'を使用して不変にすることができます。それをすることに何も間違いはないでしょう。私はちょうどあなたがあまりにも後でデータの変更の順​​序について心配しているようだと指摘しています。あなたが明示的にそれをしなければ、それは起こることではありません。 – yuji

1

注文は、データ型に依存しないです。配列の値を追加/削除/置換する必要がある場合はNSMutableArrayを使用してください。そうでない場合はNSArrayを使用できます。

+0

NSMutableArrayまたはNSArrayにsqliteデータベースに挿入した順序で値を保存するにはどうすればよいですか。私に例を教えてもらえますか? – Illep

+0

私にクエリを与える –

+0

質問などを追加して質問を更新しました。 – Illep

1

それはあなたが

形式以下FMResultSet *結果で=辞書を使用することができ、データベースにあるのと同じ順序で値を格納するための[のexecuteQueryデシベル:「PersonTable SELECT * FROM」@]。

int i = 0; 
    while([results next]) 
    { 

     Name *nam= [[Name alloc] init]; 

     nam.fname= [results stringForColumn:@"fname"]; 
     nam.lname= [results stringForColumn:@"lname"]; 

     [myDictionary setObject:nam forKey:[NSString StringWithFormat:@"%d",i]]; 
     i++; 
    } 

    [db close]; 

}else { 
    NSLog(@"DB Close"); 
} 

ここではキー付き辞書があり、キーで同じ順序で値を取得できます。これがあなたのお役に立てば幸いです。

関連する問題