2013-11-25 57 views
0

在Xcode 5中,我使用下面的代碼(位於@interface區域)從CoreData模型中獲取數據。它告訴我,我應該在這裏插入一個分號,NSManagedObjectContext給出一個錯誤,詢問「;」我不知道爲什麼

- (NSManagedObjectContext *)managedObjectContext; 

任何幫助表示讚賞!

下面是我的完整代碼塊。

//Get Data  
- (NSManagedObjectContext *)managedObjectContext{ 
     NSManagedObjectContext *context = nil; 
     id delegate = [[UIApplication sharedApplication] delegate]; 
     if ([delegate performSelector:@selector(managedObjectContext)]) { 
      context = [delegate managedObjectContext]; 
     } 
     return context; 
    } 
+0

'if([delegate performSelector:@selector(managedObjectContext)]'''是什麼意思?如果它響應選擇器,它將返回moc,如果它不會崩潰。 – Abizern

+0

@Abizern:不,它會返回零。這並不意味着崩潰。 obj-c中的很多API在不存在的情況下返回nil。這很常見。 – cjwirth

+2

@cjwirth真的嗎?我想你會發現如果對象不響應該消息,則會引發異常。 OP應該做的是調用'respondsToSelector:',這是在將消息發送給可能由於這個確切原因而不響應消息的對象之前經常完成的。 – Abizern

回答

2

當在Xcode 5,我用下面的代碼,這是在@interface區域,從我的CoreData模型中獲取數據。

這是你的問題,你只應該在@interface中聲明。實際的實現在@implementation部分。

你的接口出現

@interface 
- (NSManagedObjectContext *)managedObjectContext; 
@end 

在你實施你把實際的方法:

 
@implementation 
... 
//Get Data  
- (NSManagedObjectContext *)managedObjectContext{ 
     NSManagedObjectContext *context = nil; 
     id delegate = [[UIApplication sharedApplication] delegate]; 
     if ([delegate respondsToSelector:@selector(managedObjectContext)]) { 
      context = [delegate managedObjectContext]; 
     } 
     return context; 
    } 
... 
@end 

UPDATE:

感謝Abizern用於察覺有另一錯誤在你的代碼:行[delegate performSelector:@selector(managedObjectContext)]實際上應該是[delegate respondsToSelector:@selector(managedObjectContext)],因爲否則應用程序如果不對響應選擇器,將會崩潰。

0

你有怪異的getter在我看來,嘗試TI使用這樣一個

- (NSManagedObjectContext *)managedObjectContext { 

    if (_managedObjectContext != nil) 
    { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) 
    { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 
相關問題