2012-01-09 1 views
1

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

- (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» должны быть сделаны, чтобы быть частью diffrent расслоения и следует ссылаться из нового пучка. `

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. Может ли класс datamodel быть частью любого другого пучка, кроме основного пучка.
  2. Если да, то где я здесь не так.

ответ

2

Да, вы можете, я не знаю, откуда взялся комплект. Если он включен в проект xcode в рамках другого проекта, вы должны убедиться, что ваш пакет включен в основной пакет. Посмотрите на это: How to include a bundle in main project 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]; 

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

+0

good one dude ... +1 –

+0

Если вы хотите, отметьте это как ответ, другие могут найти его полезным – Leonardo