編輯:對於我認爲我不應該創建這種類型的實例方法,而是使其成爲類方法!另一件事,我添加了獲取方法到C類,它的工作。我只是想,如果可以通過託管對象訪問數據存儲區,這會很方便,但我認爲這有些違背managedObjectContext
背後的想法,持久性等等。核心數據:從類別中取數據(核心類的擴展名)
我不知道如果我正在嘗試做一些你不應該做的事,但在這裏。
我有一個實體A與實體B(B到許多A)有關係的數據模型。我在數據存儲中有許多類型爲B的實體,現在我想創建一些類型爲A的實體。爲了這樣做,我需要獲得對B類實體的引用,即,我有查詢數據存儲。我作爲一個B類如下,即:現在
#import "B+Helper.h"
@dynamic managedObjectContext;
@implementation B (Helper)
- (Store *)getBByRef:(NSString *)ref
{
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"B" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"ref == %@", ref];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *storeArray = [self.managedObjectContext executeFetchRequest:request error:&error];
NSInteger bCount = [bArray count];
if (bCount > 1 || bCount == 0) {
// Deal with error...
} else {
return [bArray objectAtIndex:0];
}
}
,問題是,我似乎無法正確設置managedObjectContext ---我得到的錯誤:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'B'
我試過路過在調用上述方法之前,從AppDelegate到C類的managedObjectContext
必須獲取B實體,並從C類到B + Helper類,但這並不奏效。
基本上,我只是希望能夠從簡單的NSObject
類或NSManagedObject
擴展,即從不是某種類的UIViewController
的類中進行核心日期查詢。
在C類我做了如下:
B *b = [[B alloc] init];
b.managedObjectContext = self.managedObjectContext;
但後來我得到一個錯誤說,選擇是不存在:
setManagedObjectContext:]: unrecognized selector sent to instance...
我希望這是有道理的?
類別實際上非常適合與Core Data一起使用,因爲如果您必須重新生成類文件,您的方法將不會被清除。你的想法雖然不錯,但我只是將該類方法放在類別中。 – sosborn 2012-04-13 00:10:16
從再生的角度來看,分類很棒 – 2012-04-13 00:19:25