我想创建一个按钮,即“完成”,按下时,将所有数据保存到Core Data中,我使用下面的代码
- (IBAction)done:(id)sender
{
Player *player = [[Player alloc] init];
player.name = self.nameTextField.text;
player.game = game;
player.rating = 1;
[self.delegate playerDetailsViewController:self didAddPlayer:player];
NSManagedObjectContext *context = [self managedObjectContext];
Player *player = [NSEntityDescription
insertNewObjectForEntityForName:@"Player"
inManagedObjectContext:context];
player.name = self.nameTextField.text;
player.game = game;
player.rating = 1;
NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}
但我一直收到如下错误:
语义问题:使用未声明的标识符'NSEntityDescription';你的意思是'kSecAttrDescription'吗?
接收器类型'PlayerDetailsViewController'实例消息未声明带有选择器'managedObjectContext'的方法
重新定义'玩家'
使用未声明的标识符'NSEntityDescription';你的意思是'kSecAttrDescription'吗?
错误的接收器类型'CFTypeRef'(又名'const void *')
接收者类型'NSManagedObjectContext'例如消息是前向声明
有什么想法吗?
答案 0 :(得分:2)
确保你有
#import <CoreData/CoreData.h>
标题中的某个位置,可以直接在您的文件中,也可以在应用的pch文件中。默认情况下,当您创建Core Data项目时,它应该存在,但如果您稍后添加了Core Data,则可能会丢失它。以下是核心数据项目的pch:
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#endif
答案 1 :(得分:0)
使用相同的变量名称定义Player两次:
Player *player = [[Player alloc] init];
和
Player *player = [NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:context];
第二个应该有不同的变量名。此外,您不应该通过alloc / init分配CoreData对象。此外,使用NSEntityDescription创建的播放器调用didAddPlayer。最好的地方是保存后:只有在那里你确定它已被妥善保存。
如果您没有使用ARC,那么也会发生内存泄漏,因为您执行alloc / init并且没有释放。