【发布时间】:2015-08-27 21:46:22
【问题描述】:
我要做的是获取我的 uitextfield 中名为 editItemField 的文本,并将名为 toDoItemName 的 NSString 中的值写入我的核心数据模型,属性名为 itemname。
我收到上述错误。我的核心数据模型有一个名为 itemname 的属性,我假设这可能意味着我正在使用 NSArray 中的对象做某事,但我不能这样做,因为它不是 managedObjectContext 的一部分?
错误
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'
代码
- (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];
}
准备工作
我正在通过这个 prepareforsegue 从 uitableview 传递项目。它在新的视图控制器上填充我的 uitextfield。目的是编辑项目,然后用新值更新核心数据模型。
-(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"]];
}
}
编辑
谁能告诉我这在发送 managedObjectContext 时是否正确?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
EditItem *item = [segue destinationViewController];
item.managedObjectContext = _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];
EditItem *destination = (EditItem *)segue.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem = item;
}
}
[NSManagedObject rangeOfCharacterFromSet:]: 无法识别的选择器发送到实例 0x7fc223f5d350 2015-06-11 23:10:31.717 LittleToDoApp[95329:10363535] *** 由于未捕获的异常 NSInvalidArgumentException 导致应用程序终止,原因:-[NSManagedObject rangeOfCharacterFromSet:] : 无法识别的选择器发送到实例 0x7fc223f5d350
我从未见过这个错误。这是因为它不知道在 EditItem 视图中将其发送到何处?当我点击 uitableview 中的项目时,这当然会发生。
【问题讨论】:
-
self.toDoItemName的类型是什么? -
@property (strong, nonatomic) IBOutlet UITextField *editItemField;@property (nonatomic, strong) NSString *toDoItemName;@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; -
所以它是一个
NSString- 你为什么要把它当作字典?您需要引用您的NSManagedObject实例。 -
这是我第一次涉足核心数据。您能否提供更多有关如何完成的背景信息?我仍在努力解决所有这些问题。
-
您的 prepareForSegue 中有一个对象
item- 这是您的托管对象,它有一个字段itemname。您只传递了这个字段,它是一个字符串,为 segue 做准备,但您需要传递项目。
标签: ios objective-c iphone core-data ios7