2012-05-02 48 views
0

我想創建一個按鈕,即「完成」,當按下時,所有的數據保存到核心數據,我使用下面如何插入使用核心數據的數據在IBAction爲

- (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」例如消息不聲明具有選擇「播放」

使用未聲明的標識符「NSEntityDescription」的「managedObjectContext」

重定義的方法;你的意思是'kSecAttrDescription'嗎?

爲接收器類型 'CFTypeRef'(又名 'const的空隙*')

接收機類型 '的NSManagedObjectContext' 例如消息是前向聲明

任何想法?

+0

您的代碼中出現了各種不同的錯誤。你應該從列表頂部開始,分別處理每一個。 SO是查找錯誤消息的好資源:只需在每條消息的第一部分進行搜索即可。例如,搜索'[xcode] Redefinition'就會出現[這個問題](http://stackoverflow.com/q/3533886/643383),這可能會對你有所幫助。但請不要要求我們修正代碼中的所有錯誤,僅僅是因爲你不打算自己查看它們。 – Caleb

回答

0

你定義播放器具有相同的變量名兩次:

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

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

第二個應該有不同的變量名。另外,你不應該通過alloc/init來分配CoreData對象。另外,用由NSEntityDescription創建的播放器調用didAddPlayer。最好的地方是在保存之後:因爲只有你確定它被正確保存。

如果您不使用ARC,也會發生內存泄漏,因爲您執行alloc/init並且沒有發行版。

2

請確保您有

#import <CoreData/CoreData.h> 
在你的頭

的地方,可以直接在文件或應用程式的PCH文件。創建Core Data項目時,它應該默認存在,但如果稍後添加Core Data,它可能會丟失。以下是核心數據項目的外觀:

#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 
+0

謝謝,我收到了錯誤「NSEntityDescription」;你是不是指上面的'kSecAttrDescription'。添加導入似乎可以解決它。 (我後來添加了Core Data)。 –