2014-05-14 1 views
0

내 핵심 데이터 엔티티에는 유효성이라는 정수 32 유형의 속성이 있습니다.핵심 데이터의 정수 속성이 다르게 표시됩니다.

이 방법을 사용하여 이전에 만들어진 두 개의 개체가 :

- (void) AddMandatoryItems 
{ 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObject *newMonitorItem = [NSEntityDescription 
             insertNewObjectForEntityForName:@"MonitorItem" 
             inManagedObjectContext:context]; 
    // 
    // Other codes here 
    // 
    [newMonitorItem setValue:[NSNumber numberWithInt:35] 
         forKey:@"validity"]; 
    [self.monitorItemArray addObject:newMonitorItem]; 

    NSError *error = nil; 
    if (![context save:&error]) 
    { 
     NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
    } 

    // 
    // other codes here 
    // 
    [newMonitorItem setValue:[NSNumber numberWithInt:90] 
         forKey:@"validity"]; 
    [self.monitorItemArray addObject:newMonitorItem]; 

    if (![context save:&error]) 
    { 
     NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
    } 

    // Return the number of rows in the section. 

} 

유효 값은 각각 제 1 및 제 2 객체 (35) (90)이다.

두 값

이렇게로드 :

- (void)viewDidLoad 
{ 

// 
// Other codes here 
// 

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"MonitorItem"]; 
    self.monitorItemArray = [[managedObjectContext 
           executeFetchRequest:fetchRequest 
           error:nil] mutableCopy]; 

NSLog(@"viewDidLoad.monitorItemArray[1].validity: %d", (int)[self.monitorItemArray[1] valueForKey:@"validity"]); 

} 

NSLog의 결과는 다음과 같다 :

2014년 5월 14일 14 : 55 : 15.939 SGRecencyMonitor [3086 : 70B]의 viewDidLoad을 .monitorItemArray [1] .validity : 나타내는 값으로 1,442

90 대신 1442이어야하지만 복귀 올바른 결과 아래 cellForRowAtIndexPath 방법에 체크 :

,174,515

2014년 5월 14일 14 : 55 : 15.948 SGRecencyMonitor [3086 : 70B] ItemViewController에있는 tableview의 cellForRowAtIndexPath 유효 기간 : 90

누군가가 나에게 설명해 주시겠습니까

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

NSManagedObject *monitorItem = [self.monitorItemArray objectAtIndex:indexPath.row]; 

// 
// code to display each row here 
// 
    NSLog(@"ItemViewController tableview cellForRowAtIndexPath Validity: %@", [monitorItem valueForKey:@"validity"]); 

    return cell; 
} 

결과는 다음과 같다 왜 [self.monitorItemArray [1] valueForKey : @ "validity"]를 사용하여 올바른 결과를 얻을 수 없는지이 메서드를 사용하여 self.monitorItemArray 객체를 다른 뷰에 전달합니다. 그것을 통해 올바른 값을 검색 할 수 없습니다. 아래는 segue 방법입니다

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"UpdateView"]) 
    { 
     NSManagedObject *selectedItem = [self.monitorItemArray objectAtIndex:[[self.tableView indexPathForSelectedRow] row]]; 
     ItemUpdateViewController *destViewController = segue.destinationViewController; 
     destViewController.ItemReceived = selectedItem; 
    } 
} 

내가 잘못 했습니까? 당신

+0

'int'를 원한다면'[(NSNumber *) [self.monitorItemArray [1] valueForKey : @ "validity"] intValue]'이어야합니다. 귀하의 수표에 그것은'[(NSNumber *) [self.monitorItemArray [1] valueForKey : @ "타당성"] stringValue]'여야합니다. 그러나 NSNumber가 암시 적으로 NSString으로 NSString을 던져 넣습니다. – kaman

답변

0

이 시도 감사 :

- (void)viewDidLoad 
{ 
NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"MonitorItem"]; 
self.monitorItemArray = [[managedObjectContext 
          executeFetchRequest:fetchRequest 
          error:nil] mutableCopy]; 

NSNumber *n = [self.monitorItemArray[1]  valueForKey:@"validity"]; 
NSLog(@"viewDidLoad.monitorItemArray[1].validity: %d", [n intValue]); 
} 

// it works for me 
+0

nmh, kaman 및 jrturton에게 감사드립니다. 이제 해결되었습니다. – Sharkfin

+0

@BusDriver : 제공된 답변 중 하나가 문제를 해결하는 데 도움이 되었다면 답으로 받아 들여야합니다. –

+0

예. 가만은 나의 잘못을 지적했다. jrturton이 나에게 오류를 보여줍니다. nmh는 나에게 방법을 보여 주었고 나는 또한 그것을 코딩에 채택했다. 고마워. 내 무지를 용서해주십시오. – Sharkfin

1

을 당신이 형식 지정자로 %d 사용하고있는 첫 번째 인스턴스에서 -이 정수를 기대한다, 그러나 당신은 그것을 객체 인 NSNumber를 전달합니다. 객체의 메모리 주소의 정수가 표시됩니다. 두 번째 인스턴스에서는 객체를 예상하는 %@을 사용하고 숫자 값을 인쇄하는 NSNumberdescription 메소드의 결과가 표시됩니다.

첫 번째 형식 지정자를 %@으로 변경하거나 숫자 개체에서 integerValue을 전달하십시오.

관련 문제