2010-11-13 40 views
0

我不想通過現有的iPhone應用程序進行數據遷移。有可能讓ipad版本使用與iphone版本不同的xcdatamodel文件嗎?iphone/ipad通用應用程序可以有兩個不同的xcdatamodel文件嗎?

我搜索引用myapp.xcdatamodel的項目文件,並找不到它連接的位置。

有什麼建議嗎?

appdelegate在哪裏設置?

我看到:

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"storeLocations.sqlite"]]; 

回答

2

永久存儲協調器或核心數據的任何其他部分沒有什麼不可思議的。它們只是具有方法和屬性的對象,就像其他任何東西一樣。

在你的應用程序代理,你只需要指定一個以上的,一拉:

NSManagedObjectContext *managedObjectContext; 
NSManagedObjectModel *managedObjectModel; 
NSPersistentStoreCoordinator *persistentStoreCoordinator; 

NSManagedObjectContext *managedObjectContext2; 
NSManagedObjectModel *managedObjectModel2; 
NSPersistentStoreCoordinator *persistentStoreCoordinator2; 

實施

- (NSManagedObjectContext *)managedObjectContext { 

    if (managedObjectContext != nil) { 
    return managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
    managedObjectContext = [[NSManagedObjectContext alloc] init]; 
    [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return managedObjectContext; 
} 

- (NSManagedObjectContext *)managedObjectContext2 { 

    if (managedObjectContext2 != nil) { 
    return managedObjectContext2; 
    } 

    NSPersistentStoreCoordinator *coordinator2 = [self persistentStoreCoordinator2]; 
    if (coordinator2 != nil) { 
    managedObjectContext2 = [[NSManagedObjectContext alloc] init]; 
    [managedObjectContext2 setPersistentStoreCoordinator:coordinator2]; 
    } 
    return managedObjectContext2; 
} 

+0

好的,但我不清楚的是如何告訴它使用哪個版本:iphone.xcdatamodel和ipad.xcdatamodel在代碼中,我定義了這個? – Arcadian 2010-11-13 06:05:54

+0

在應用程序委託的託管對象模型方法中。 modelPath指定它,它表示pathForResource:@「iphone」(或任何它所稱的)。在你的第二個MOM中,你將擁有pathForResource:@「ipad」(或者任何其他的被稱爲)。 – 2010-11-13 06:24:47

1

模型獲取應用程序委託掛鉤。

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"myApp" 
                 ofType:@"momd"]; 

我會建議針對兩種模式,但我也不知道它是如何工作的。我猜對象模型和持久存儲的條件。

你的ipad模型與你需要另一個模型但不是不同的應用有什麼不同?

+0

它其實沒什麼不同 – Arcadian 2010-11-13 03:38:50

+0

我加了1列作爲標識字段。但是,所有現有的數據都需要獲得一個新的ID,因此我必須將數據移過來然後生成其ID。但我不確定只需遷移數據需要什麼 – Arcadian 2010-11-13 03:39:40

+0

我沒有看到您在應用程序代理中討論的代碼行。我確實看到:NSURL * storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] ​​stringByAppendingPathComponent:@「storeLocations.sqlite」]]; – Arcadian 2010-11-13 03:44:38

0

我記得閱讀核心數據doco中關於指定哪個持久存儲管理對象存儲的東西。見NsManagedObjectContext assignObject:toPersistentStore:。這會讓你朝正確的方向發展,我認爲。您可能需要實例化多個持久存儲對象。

相關問題