может ли модель данных Coredata быть частью любого другого пакета, кроме основного - PullRequest
1 голос
/ 09 января 2012

У меня есть файл модели данных "Abcde.xcdatamodeld". В настоящее время это часть моего основного пакета, и я ссылаюсь на него, используя следующий код.

- (NSManagedObjectModel *)managedObjectModel  {
if (managedObjectModel_ != nil) {
    return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Abcde" ofType:@"momd"];

NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return managedObjectModel_;
}

Теперь у меня есть требование, чтобы в "Abcde.xcdatamodeld" было сделано, чтобы он был частью дифференцированного пакета , и на него следует ссылаться из нового пакета . `

if (managedObjectModel_ != nil) {
    return managedObjectModel_;
}
NSBundle *dataModelBundle = [NSBundle bundleWithIdentifier:@"com.product.dataModelBundle"];
NSString *modelPath = [dataModelBundle pathForResource:@"Abcde" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

return managedObjectModel_;
}

Но у меня происходит сбой при выполнении кода выше .. МОИ вопросы;

  1. Может ли класс модели данных быть частью любого другого пакета, кроме основного пакета.
  2. Если да, то где я тут ошибаюсь?

1 Ответ

2 голосов
/ 09 января 2012

Да, вы можете, я не знаю, откуда взялся комплект. Если он включен из проекта xcode в другой проект, вы должны убедиться, что ваш пакет включен в основной пакет. Посмотрите на это: Как включить пакет в основной проект xcode 4

Для быстрой проверки вы можете взглянуть на свой пакет приложений с «Показать содержимое пакета» и посмотреть, есть ли включенный пакет. Затем, начиная с этого момента, вы должны искать пакет, содержащий вашу модель данных. Это то, что я сделал в моем проекте. Самым сложным было включить внешний комплект. Я думаю, что вы почти с вашим кодом.

NSBundle *bundle = [NSBundle mainBundle];    
NSString *includedModelPath = [bundle pathForResource:@"YourIncludedBundle" ofType:@"bundle"];
NSURL *includedModelURL = [[NSBundle bundleWithPath:includedModelPath] URLForResource:@"DataModel" withExtension:@"momd"];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSURL *storeUrl = [NSURL fileURLWithPath: [documentsDirectory stringByAppendingPathComponent: dbname]];
self.managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:includedModelURL];

Я только что скопировал и вставил из своего кода, чтобы сделать его более подробным, чтобы лучше объяснить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...