2013-07-26 10 views
5

Wciąż jestem nowy w danych podstawowych.Baza danych zapisuje tylko ostatni element

Próbuję pętli trzy razy w tablicy i przy każdej pętli, zapisuję numer indeksu.

Ale wyświetla tylko ostatni numer indeksu podczas pobierania wyników. Przesłania wszystko, co zostało wcześniej wstawione.

Mój kod jest zapisany w AppDelegate.

Oto mój kod:

NSManagedObjectContext *context = [self managedObjectContext]; 
NSManagedObject *tagsDB = [NSEntityDescription insertNewObjectForEntityForName:@"Tags" inManagedObjectContext:context]; 

for (int i = 0 ; i < 3 ; i++) 
{ 
    [tagsDB setValue:i forKey:@"ID"]; 

} 

[self saveContext]; 

...

- (void)saveContext 
{ 
    NSError *error = nil; 
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 
    if (managedObjectContext != nil) { 
     if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 
      // Replace this implementation with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 
    } 
} 
+0

Kiedy ponownie zadeklarować NSManagedObject w każdej iteracji, wszystkie dane są zapisywane, ale zawsze uzyskać dodatkowy wiersz wartości null – firewall

Odpowiedz

7

Musisz utworzyć swój obiekt dla każdej wartości.

NSManagedObjectContext *context = [self managedObjectContext]; 

for (int i = 0 ; i < 3 ; i++) 
{ 
    NSManagedObject *tagsDB = [NSEntityDescription insertNewObjectForEntityForName:@"Tags" inManagedObjectContext:context]; 
    [tagsDB setValue:i forKey:@"ID"]; 

} 

[self saveContext]; 
+0

Kiedy ponownie zadeklarować NSManagedObject w każdej iteracji, wszystkie dane są zapisywane, ale Zawsze otrzymuję dodatkowy wiersz wartości zerowych – firewall

+0

Dodatkowy wiersz pojawia się po uruchomieniu zapytania na twoim DB? –

+0

, więc to normalne, że masz ten dodatkowy wiersz? Czy mogę się go pozbyć? – firewall

1

w twojej pętli - kod, który zostanie powtórzony po prostu zmienia wartość nowej pozycji włożona. To, co musisz zrobić w pętli for, to insertNewObjectForEntityForName, która wstawi nowy, oddzielny element dla każdej iteracji.