2013-02-13 81 views
1
@implementation FirstScene 
... 
- (void)nextScene { 
    Meetings *meetings = (Meetings *) [NSEntityDescription insertNewObjectForEntityForName:@"Meetings" inManagedObjectContext:self.managedObjectContext]; 
    NSManagedObjectID* objectID = [meetings objectID]; 
    [secondScene setObjectID:objectID]; 
} 
... 
@end 

@implementation SecondScene 
.... 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
} 

+ (void)setObjectID:(NSManagedObjectID*)objectID { 
    NSManagedObjectContext *context = [self managedObjectContext]; // ERROR 
    Meetings *theSameMeetings = (Meetings *)[context objectWithID:objectID]; 
} 
... 
@end 

我得到一個錯誤」沒有已知的選擇‘managedObjectContext’類的方法在下面的代碼:CoreData:對象ID錯誤:「對於選擇沒有已知的類方法‘managedObjectContext’

NSManagedObjectContext *context = [self managedObjectContext]; 

我這裏的目標是將FirstScene中*會議(managedObjectContext)的objectID傳遞給SecondScene,以便我可以繼續添加到實體會議屬性中。謝謝。

回答

0

通過調用[self managedObjectContext],編譯器正在尋找當前目標中的方法名稱,即-(void)managedObjectContext,這顯然不存在。傳遞對象ID的最佳方法是設置屬性併合成該屬性,這將允許您將對象ID分配給會議實例,然後從所述實例中檢索它。

- 編輯 -

在您需要訪問要聲明將委託作爲這樣的ManagedObjectID爲準類:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

然後在您的setObjectID方法,你可以撥打:

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
+0

謝謝。我對此很陌生。我是否在FirstScene或SecondScene中創建NSManagedObjectID的實例?你能否詳細說明一下「這將允許你將objectID分配給會議實例,然後從所述實例中檢索它。「 – user1107173 2013-02-13 18:34:56

+0

你會想在你的AppDelegate中聲明managedObject Context,然後你需要在你需要訪問managedObjectContext的類中創建一個你的應用程序委託的實例,我將用代碼 – JeffN 2013-02-13 18:50:15

+0

編輯我的答案謝謝你提供問題:是不是我已經在我的代碼中已經有什麼?我有這個代碼在需要訪問managedObjectContext在viewDidLoad中的每個類:self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication] delegate ] managedObjectContext]; – user1107173 2013-02-13 22:17:12

0

兄弟,因爲它說你在'SecondScene'中沒有'managedObjectContext'方法。是嗎?

顯然你是一個初級核心數據,你剛剛步入它。然後,轉到您的項目的AppDelegate,並搜索' - (void)managedObjectContext',您將看到那裏有一個manageobjectcontext方法,用AppDelegate中的方法替換[self manageobjectcontext]。

這將讓你有機會獲得的appdelegate

YourAppDelegateClass *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; and now call [appDelegate managedObjectContext];   

希望這有助於。

2

這不是一個核心數據錯誤,這是一個基本的Objective-C錯誤。你在這個方法:

+ (void)setObjectID:(NSManagedObjectID*)objectID; 

的「+」說,這是一個類的方法,而不是一個實例方法。所以在這種情況下selfSecondScene類,而不是該類的任何特定實例。當您嘗試這樣做:

NSManagedObjectContext *context = [self managedObjectContext]; 

...你試圖調用名爲+managedObjectContext方法,即一類方法使用該名稱。這顯然不存在,這並不令人感到意外。

我懷疑你打算將setObjectID:作爲一個實例方法,這意味着它應該有一個-而不是在行首的+

相關問題