EDIT: Во-первых, я полагаю, что мне не следует создавать метод экземпляра такого типа, а делать его методом класса!? Другое дело, я добавил в класс C метод fetch, который работает. Я просто думаю, что было бы удобно, если бы можно было получить доступ к хранилищу данных через управляемые объекты, но я полагаю, что это несколько противоречит идеям, лежащим в основе 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];
}
}
Теперь проблема в том, что я не могу правильно установить manageObjectContext --- я получаю сообщение об ошибке:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'B'
Я попытался передать managedObjectContext
из AppDelegate в класс C, чтобы получить объекты B, и из класса C в класс B + Helper перед вызовом метода, указанного выше, но это не сработало.
По сути, я просто хочу иметь возможность сделать запрос основной даты из простого класса NSObject
или расширения NSManagedObject
, то есть из класса, который не является каким-либо UIViewController
.
В классе C я сделал следующее:
B *b = [[B alloc] init];
b.managedObjectContext = self.managedObjectContext;
Но затем я получаю сообщение об отсутствии селектора:
setManagedObjectContext:]: unrecognized selector sent to instance...
Я надеюсь, это имеет смысл?!