我要做的是获取名为editItemField
的uitextfield中的文本,并将名为toDoItemName
的NSString中的值写入我的核心数据模型,其属性名为{{1} }。
我得到了上述错误。我的核心数据模型有一个名为itemname
的属性我认为这可能意味着我正在使用来自NSArray的对象做某事但是我不能这样做因为它不是managedObjectContext的一部分?
错误
itemname
码
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'
prepareforsegue
我通过这个准备版本从uitableview传递项目。它在新的viewcontroller上填充我的uitextfield。目的是编辑项目,然后使用新值更新核心数据模型。
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.editItemField) {
// Update existing device
[self.toDoItemName setValue:self.editItemField.text forKey:@"itemname"];
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
修改
在发送managedObjectContext时,有人能告诉我这是否正确吗?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
[segue.destinationViewController setToDoItemName:[item valueForKey:@"itemname"]];
}
}
更新了segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
EditItem *item = [segue destinationViewController];
item.managedObjectContext = _managedObjectContext;
}
}
[NSManagedObject rangeOfCharacterFromSet:]:发送到实例0x7fc223f5d350的无法识别的选择器2015-06-11 23:10:31.717 LittleToDoApp [95329:10363535] ***因未捕获的异常而终止应用程序NSInvalidArgumentException,原因: - [NSManagedObject rangeOfCharacterFromSet:] :无法识别的选择器发送到实例0x7fc223f5d350
我从未见过这个错误。这是因为它不知道在EditItem视图中将其发送到何处?当我点击uitableview中的某个项目时,会发生这种情况。
答案 0 :(得分:1)
您需要将NSManagedObject
实例发送到下一个视图控制器,而不仅仅是单个字符串
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
NextVCClass *destination = (NextVCClass *)segues.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem=item;
}
}
您需要将NextVCClass更改为目标UIViewController子类的类