0

ボタンを作成したい、つまり「完了」ボタンを押すと、すべてのデータが 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」は前方宣言です

何か案は?

4

2 に答える 2

2

あなたが持っていることを確認してください

#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
于 2012-06-08T09:24:20.223 に答える
0

同じ変数名で Player を 2 回定義します。

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

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

2 つ目は別の変数名にする必要があります。また、alloc/init を使用して CoreData オブジェクトを割り当てないでください。また、NSEntityDescription で作成したプレーヤーで didAddPlayer を呼び出します。最適な場所は保存後です。適切に保存されたことを確認できるのはそこだけです。

ARC を使用していない場合は、alloc/init を実行しても解放されないため、メモリ リークも発生します。

于 2012-05-02T13:45:39.023 に答える