讓我確保首先我有X-Code 4.3.2版本和iOS 5.1 SDK。我在我的項目中使用了以下用於核心數據操作的方法。兩種方法都提供相同的警告即「不兼容的指針類型從結果類型爲NSManagedObject <協議>」「的函數返回'NSManagedObject *'。NSManagedObject不兼容的指針類型警告
方法A:
- (NSManagedObject<Protocol> *)newMOforNilMOC
{
return [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}
對於方法方法的我只是做類型轉換,並添加(NSManagedObject <協議> *)則警告得到如下所述去除。
- (NSManagedObject<Protocol> *)newMOforNilMOC
{
return (NSManagedObject<Protocol> *) [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}
方法B:
+ (NSManagedObject<Protocol> *) newInContext:(NSManagedObjectContext *)context
{
return [[NSEntityDescription insertNewObjectForEntityForName:[[(NSManagedObject<Protocol> *)self class] entityName] inManagedObjectContext:context]retain];
}
對於B法當我做類型轉換將無法正常工作,因此我只是改變從newInContext到AddnewInContext方法的名稱(用Google搜索時發現某處)然後警告被刪除。
我有以下問題:
- 如果需要鑄字第一種方法,那麼爲什麼第二個不與解決方案的工作?
- 更改方法名稱的確切含義是什麼?這是正確的方法來消除上述警告?爲什麼類型轉換不能在 方法B?
這可能很複雜,但如果您有任何疑問,請隨時發表評論。因爲我想知道其中的差異,至少我可以學習一些關於核心數據的新知識。
AddnewInContext在做什麼? – DarthMike
它只是新的改變的名稱無非,或者它可以是別的。正如我上面提到的,我只是改變方法的名稱。 – iMash