Ios 核心数据中的整数属性显示方式不同

Ios 核心数据中的整数属性显示方式不同,ios,core-data,Ios,Core Data,在我的核心数据实体中,有一个名为validity的整型32属性 前面使用此方法创建了两个对象: - (void) AddMandatoryItems { NSManagedObjectContext *context = [self managedObjectContext]; NSManagedObject *newMonitorItem = [NSEntityDescription insertNe

在我的核心数据实体中,有一个名为validity的整型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.

}
第一个和第二个对象的有效值分别为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-05-14:55:15.939 SGReceincyMonitor[3086:70b]viewDidLoad.monitorItemArray[1]。有效期:1442

如图所示,该值应为90,而不是1442。但是,检查下面的CellForRowatineXpath方法会返回正确的结果:

- (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;
}
结果如下:

2014-05-14 14:55:15.948 SGReceincyMonitor[3086:70b]项目视图控制器表格视图单元格行索引路径有效性:90

有人能解释一下为什么我无法使用[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;
    }
}
我做错了什么?谢谢

试试这个:

- (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

在第一个实例中,您使用
%d
作为格式说明符-这需要一个整数,但您传递给它一个
NSNumber
,它是一个对象。您将看到对象内存地址的整数。在第二个实例中,您使用的是
%@
,它需要一个对象,您看到的是
NSNumber
description
方法的结果,该方法只打印出数值


将第一个格式说明符更改为
%@
,或者从number对象传入
integerValue

如果您想要
int
它应该是
[(NSNumber*)[self.monitoriemrarray[1]valueForKey:@“validity”]intValue]
。在您的检查中,它应该是
[(NSNumber*)[self.monitoriemrarray[1]valueForKey:@“validity”]stringValue]
,但似乎出于某种原因,NSNumber强制转换为NSStringimplicitly@BusDriver:如果提供的答案中有一个帮助您解决了问题,那么您应该接受它作为答案。是。卡曼指出了我在理解上的错误。jrturton以格式向我显示错误。nmh向我演示了如何使用它,我也在我的编码中采用了它。谢谢你们。请原谅我的无知。