2014-02-27 22 views
0

爲什麼它總是在db中生成0行。如果有新的記錄,那麼新的條目,但是當條目已經存在時,它應該更新,但只是它找到的那些。但我總是有0個條目,更新正在工作。我是否會誤解foor循環?我認爲它應該是這樣。更新是可能的,但總是包含0行 - 核心數據更新

for (int i=0;i<[rowCustomer count];i++) 
{ 
    // NSLog(@"row customer %@",rowProductItem); 
    if ([[rowCustomer objectAtIndex:i] isEqualToString:@""]) { 
     continue; 
    } 

    componentsCustomer= [[rowCustomer objectAtIndex:i] componentsSeparatedByString:@";"]; 

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
    int f = [[componentsCustomer objectAtIndex:0] intValue]; 
    int f1 = [[componentsCustomer objectAtIndex:18] intValue]; 
    int f2 = [[componentsCustomer objectAtIndex:3] intValue];    

    NSNumber *num1 = [NSNumber numberWithInt:f]; 
    NSNumber *num2 = [NSNumber numberWithInt:f1]; 
    NSNumber *num3 = [NSNumber numberWithInt:f2];    

    NSDateFormatter *dateFormater1 = [[NSDateFormatter alloc] init]; 
    [dateFormater1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSDate *dateFromString1 = [dateFormater1 dateFromString:[componentsCustomer objectAtIndex:1]]; 
    NSDate *dateFromString2 = [dateFormater1 dateFromString:[componentsCustomer objectAtIndex:2]]; 

    NSDateFormatter *dateFormater2 = [[NSDateFormatter alloc] init]; 
    [dateFormater2 setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateFromString3 = [dateFormater1 dateFromString:[componentsCustomer objectAtIndex:7]]; 

    Customer *newCustomer = [NSEntityDescription insertNewObjectForEntityForName:@"Customer" inManagedObjectContext:[self managedObjectContext]]; 

    NSFetchRequest *fetchcustomer = [NSFetchRequest fetchRequestWithEntityName:@"Customer"]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(remoteID == %@) AND (lastedited < %@)",num1,dateFromString2]; 
    [fetchcustomer setPredicate:predicate]; 
    responseCustomer = [[[self managedObjectContext] executeFetchRequest:fetchcustomer error:&error] mutableCopy]; 

    NSFetchRequest *fetchcustomer2 = [NSFetchRequest fetchRequestWithEntityName:@"Customer"]; 
    NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"(remoteID == %@) AND (lastedited == %@)",num1,dateFromString2]; 
    [fetchcustomer2 setPredicate:predicate2]; 
    responseCustomer2 = [[[self managedObjectContext] executeFetchRequest:fetchcustomer2 error:&error] mutableCopy]; 

    if (responseCustomer != nil && [responseCustomer count] > 0) { 

     if ([num2 intValue] > 1) { 

      [self.managedObjectContext deleteObject:[responseCustomer firstObject]]; 
      [self saveContext]; 

     } else { 

      anzahlCustomer = YES; 

      // Now we have the object that we're looking for, we can update it 

      [[responseCustomer firstObject] setValue:num1 forKey:@"remoteID"]; 
      [[responseCustomer firstObject] setValue:dateFromString1 forKey:@"created"]; 
      [[responseCustomer firstObject] setValue:dateFromString2 forKey:@"lastedited"]; 
      [[responseCustomer firstObject] setValue:num3 forKey:@"aktiv"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:4] forKey:@"hofname"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:5] forKey:@"kundenland"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:6] forKey:@"anrede"]; 
      [[responseCustomer firstObject] setValue:dateFromString3 forKey:@"birthday"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:8] forKey:@"cstreet"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:9] forKey:@"plz"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:10] forKey:@"place"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:11] forKey:@"latitude"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:12] forKey:@"longitude"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:13] forKey:@"phone"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:14] forKey:@"homepage"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:15] forKey:@"firstname"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:16] forKey:@"surname"]; 
      [[responseCustomer firstObject] setValue:[componentsCustomer objectAtIndex:17] forKey:@"email"]; 
      [[responseCustomer firstObject] setValue:num2 forKey:@"sync"]; 
      [[responseCustomer firstObject] setValue:@"Leerfeld" forKey:@"leerfeld"]; 
      [self saveContext]; 
     }    

    } else if(responseCustomer2 != nil && [responseCustomer2 count] < 1) { 

     anzahlCustomer = YES; 

     newCustomer.remoteID = num1; 
     newCustomer.created = dateFromString1; 
     newCustomer.lastedited = dateFromString2; 
     newCustomer.aktiv = num3; 
     newCustomer.hofname = [componentsCustomer objectAtIndex:4]; 
     newCustomer.kundenland = [componentsCustomer objectAtIndex:5]; 
     newCustomer.anrede = [componentsCustomer objectAtIndex:6]; 
     newCustomer.birthday = dateFromString3; 
     newCustomer.cstreet = [componentsCustomer objectAtIndex:8]; 
     newCustomer.plz = [componentsCustomer objectAtIndex:9]; 
     newCustomer.place = [componentsCustomer objectAtIndex:10]; 
     newCustomer.latitude = [componentsCustomer objectAtIndex:11]; 
     newCustomer.longitude = [componentsCustomer objectAtIndex:12]; 
     newCustomer.phone = [componentsCustomer objectAtIndex:13]; 
     newCustomer.homepage = [componentsCustomer objectAtIndex:14]; 
     newCustomer.firstname = [componentsCustomer objectAtIndex:15]; 
     newCustomer.surname = [componentsCustomer objectAtIndex:16]; 
     newCustomer.email = [componentsCustomer objectAtIndex:17]; 
     newCustomer.sync = num2; 
     newCustomer.leerfeld = @"leerfeld"; 

     [self saveContext]; 

    } 
} // enf for loop 

回答

0

我必須從for循環取出更新獲取。就像現在一樣,它總是產生所有循環,並創建0條記錄,即使它只是一條更新記錄。 因此,我會針對更新的提取問題進行單獨的更新。