gpt4 book ai didi

ios - 核心数据中的整数属性以不同方式显示

转载 作者:行者123 更新时间:2023-11-29 02:58:02 25 4
gpt4 key购买 nike

在我的核心数据实体中,有一个 Integer 32 类型的属性,名为 validity。

之前使用此方法创建了两个对象:

- (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 14:55:15.939 SGRecencyMonitor[3086:70b] viewDidLoad.monitorItemArray[1].validity: 1442

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

- (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 SGRecencyMonitor[3086:70b] ItemViewController tableview cellForRowAtIndexPath 有效性:90

有人可以向我解释为什么我无法使用 [self.monitorItemArray[1] valueForKey:@"validity"] 获得正确的结果我正在使用此方法将对象 self.monitorItemArray 传递给另一个 View 。我无法通过它检索正确的值。下面是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;
}
}

我做错了什么?谢谢

最佳答案

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

要么将第一个格式说明符更改为 %@,要么从数字对象中传入 integerValue

关于ios - 核心数据中的整数属性以不同方式显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com