【问题标题】:How to insert data using Core Data in IBAction如何在 IBAction 中使用 Core Data 插入数据
【发布时间】:2012-05-11 18:45:46
【问题描述】:

我想创建一个按钮,即“完成”,按下时将所有数据保存到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'例如消息是一个前向声明

有什么想法吗?

【问题讨论】:

  • 您的代码中存在各种不同的错误,这些错误源于各种不同的问题。你应该从列表的顶部开始,分别处理每一个。 SO 是找出错误消息的绝佳资源:只需搜索每条消息的第一部分。例如,搜索[xcode] Redefinition 会出现this question,这可能会对您有所帮助。但是请不要仅仅因为您没有费心自己查找它们而要求我们修复您代码中的所有错误。

标签: ios cocoa core-data


【解决方案1】:

确保你有

#import <CoreData/CoreData.h>

在您的标头中的某个位置,直接在您的文件中或在您应用的 pch 文件中。当您创建 Core Data 项目时,它应该默认存在,但如果您稍后添加 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

【讨论】:

  • 谢谢,我收到错误“NSEntityDescription”;您的意思是上面的“kSecAttrDescription”吗?添加导入似乎可以解决它。 (我后来添加了 Core Data)。
【解决方案2】:

你用相同的变量名定义了 Player 两次:

Player *player = [[Player alloc] init];

Player *player = [NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:context];

第二个应该有不同的变量名。此外,您不应该通过 alloc/init 分配 CoreData 对象。此外,使用 NSEntityDescription 创建的播放器调用 didAddPlayer。保存后最好的地方是:因为只有在那里你确定它被正确保存了。

如果你没有使用 ARC,也会有内存泄漏,就像你做 alloc/init 一样,没有释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多