2012-03-26 6 views
0

コアデータにデータを保存したい。"Core Data"(iPhone)についてうまくやりたい

ただし、保存されるデータは最後のデータのみです。

私は、重要な問題は唯一だと思います!のみ!最後の1つのデータを保存しました。

実は私は、これは私のコードである

..

私はあなたに希望してくださいが、私の質問を理解して...非常によく英語を知りません。

私はこのコードを説明します。このプロジェクトにはサンプルがあります。 csvですから、そのファイルは別です。分離されたデータは "setvalue"によって保存されます。

何が問題ですか?

NSString *path = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"csv"]; 
    NSString *strText = [NSString stringWithContentsOfFile:path encoding:NSEUCKREncoding error:nil]; 

    NSArray * array = [strText componentsSeparatedByString:@"\n"]; 

    NSString *tempText; 
    int i = 0; 
    NSArray * temparray; 

    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate]; 
    NSManagedObjectContext *newContext = [appDelegate managedObjectContext]; 
    NSManagedObject *newContact; 
    newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:newContext]; 


    NSError *error; 
    for(i = 1;i<[array count]-1;i++){ 
     tempText = [[array objectAtIndex:i]description]; 

     temparray = [tempText componentsSeparatedByString:@"##"]; 

     [newContact setValue:[temparray objectAtIndex:0] forKey:@"name"]; 
     [newContact setValue:[temparray objectAtIndex:1] forKey:@"phone"]; 
     [newContact setValue:[temparray objectAtIndex:2] forKey:@"sex"]; 

     [newContext save:&error]; 
    } 
+0

あなたは意図的に、配列の最初のオブジェクトをスキップしていますか?インデックス1でループを開始しますが、配列の最初のオブジェクトのインデックスは0です。 –

+0

はい、故意に..私はそれを解決しました。 :-) –

+0

大丈夫です。あなたはcsvを解析することを読んでいるはずです。おそらくテーブルヘッダーです。 –

答えて

1

私はあなたがこの置くべき、だと思う:あなたは、各temparrayのための新しい連絡先を挿入する必要がforループ

+0

これをしたら、 '[newContext save:&error];'をforループの外側に置くことを考えてください。 –

+0

ありがとう:-)私はとても幸せです! –

0

の最初の行に

NSManagedObject *newContact; 
newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:newContext]; 

を。したがって、newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:newContext];をforに移動する必要があります。

+0

ありがとうございました!私はそれを解決した! Dizietのために... –

1

新しいエンティティをループ外に作成しているため、新しいエンティティは1つだけ作成されます。 forループの先頭にこのビットを移動:

newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:newContext]; 

同様:

for(i = 1;i<[array count]-1;i++){ 
    newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:newContext]; 
    tempText = [[array objectAtIndex:i]description]; 

    temparray = [tempText componentsSeparatedByString:@"##"]; 

    [newContact setValue:[temparray objectAtIndex:0] forKey:@"name"]; 
    [newContact setValue:[temparray objectAtIndex:1] forKey:@"phone"]; 
    [newContact setValue:[temparray objectAtIndex:2] forKey:@"sex"]; 

    [newContext save:&error]; 
} 
+0

T^T < - これは印象的な顔文字.. あなたは非常に非常に天才です。ありがとうございました!!!!!!!!!! –

関連する問題