2012-01-09 29 views
1

我有一個datamodel文件「Abcde.xcdatamodeld」。它目前是我的主包中的一部分,我使用下面的代碼引用它。可以將Coredata的dataModel作爲除主包之外的任何其他包的一部分

- (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. 如果是,那麼我在哪裏錯了。

回答

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

不錯的一個傢伙... +1 – 2012-01-09 12:25:44

+0

如果這對你是正確的,將其標記爲已回答,其他人可能會認爲它有用 – Leonardo 2012-01-26 08:26:00

相關問題