在我的核心數據實體中,存在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年5月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年5月14日14:55:15.948 SGRecencyMonitor [3086:70B] ItemViewController的tableview的cellForRowAtIndexPath:90
可有人請向我解釋爲什麼我不能使用[self.monitorItemArray [1] valueForKey:@「validity」]得到正確的結果我正在使用此方法將對象self.monitorItemArray傳遞給另一個視圖。我無法通過它檢索正確的值。以下是賽格方法
- (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;
}
}
我做了什麼錯了?謝謝
如果你想'int'它應該是'[(NSNumber *)[self.monitorItemArray [1] valueForKey:@「validity」] intValue]'。在你的檢查應該是'[(NSNumber *)[self.monitorItemArray [1] valueForKey:@「validity」] stringValue]'但似乎由於某種原因NSNumber隱式轉換爲NSString – kaman