2014-09-26 67 views
8

希望你能幫上忙。我將Today支持添加到我的應用程序,該應用程序使用MagicalRecord https://github.com/magicalpanda/MagicalRecord來管理我所有的CoreData資料。MagicalRecord(CoreData)+ Today Extension(iOS8)...他們會玩嗎?

我正在撕裂我的頭髮,試圖瞭解如何將我的數據展現到Today擴展中。

我已啓用應用組,如此處所述http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8但是,我正在閱讀的所有文檔和StackOverflow帖子都與直接使用CoreData有關。 MagicalRecord爲你做了很多艱苦的工作,這就是爲什麼我使用它,因爲我在這個項目的開始階段完全不熟悉它。所以像:

如果你初始化你的核心數據堆棧,你將添加一個商店 您persistentStoreCoordinator一點是這樣的:

[persistentStoreCoordinator 
addPersistentStoreWithType:NSSQLiteStoreType configuration:nil 
URL:storeURL options:options error:&error] 

這是一個簡單的事情將您以前的storeURL (通常位於NSDocumentDirectory中的某處)的值更改爲 共享的App Group文件夾中包含的位置。你使用

containerURLForSecurityApplicationGroupIdentifier: NSURL *directory = 
[[NSFileManager defaultManager] 
containerURLForSecurityApplicationGroupIdentifier:@"group.YourGroupName"]; 
NSURL *storeURL = [directory 
URLByAppendingPathComponent:@"YourAppName.sqlite"]; 

這個......我不明白如何/在哪裏實現。

我想象過,我只需要在我的擴展中設置MagicalRecord堆棧,就像我在我的appDelegate中那樣,但當然這是失敗的。

真的希望有人可能處於類似的情況,並能夠闡明如何前進與這一個。

任何你需要我發佈的代碼只是讓我知道。

在此先感謝

+0

可能值得添加,MagicalRecord w饒恕所有的CoreData堆棧,所以我很猶豫要去探索並且潛在地破壞已經工作的東西。 – 2014-09-26 18:03:30

+0

@Emilie,你是否設法解決它? – marcelosalloum 2016-03-01 17:22:35

回答

4

我有同樣的問題,我就可以按照此線程來解決它。 https://github.com/magicalpanda/MagicalRecord/issues/858

我第一次更新以下方法NSPersistentStore + MagicalRecord.m

- (NSURL *) MR_urlForStoreName:(NSString *)storeFileName 
{ 
    NSFileManager *fileManager = [[NSFileManager alloc] init]; 

    NSURL *directory = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.yourIdentifier"]; 
    NSURL *pathToStore = [directory URLByAppendingPathComponent:storeFileName]; 

    return pathToStore; 

// NSArray *paths = [NSArray arrayWithObjects:[self MR_applicationDocumentsDirectory], [self MR_applicationStorageDirectory], nil]; 
// NSFileManager *fm = [[NSFileManager alloc] init]; 
// 

// for (NSString *path in paths) 
// { 
// NSString *filepath = [path stringByAppendingPathComponent:storeFileName]; 
// if ([fm fileExistsAtPath:filepath]) 
// { 
// return [NSURL fileURLWithPath:filepath]; 
// } 
// } 
// 
// return [NSURL fileURLWithPath:[[self MR_applicationStorageDirectory] stringByAppendingPathComponent:storeFileName]]; 
} 

然後我的擴展中我只是添加了以下到其觀點,也load方法。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [MagicalRecord setupCoreDataStackWithStoreNamed:<storeFileName>]; 
} 
+0

最後一部分不是@「組。你的標識符「應該是你用於storeFileName的任何東西 – jwhat 2014-10-09 21:47:22

+0

這是正確的,我已經更新了我的答案 – 2014-10-10 12:11:34

+0

這實際上會導致核心數據爲空,如果您將其作爲現有應用程序的更新發布,請查找其他解決方案。 – jwhat 2014-11-23 18:14:18

5

不知道這是否適用於MagicalRecord以前的版本,但由於2.2你可以通過期末網址作爲店名:

NSFileManager *fileManager = [[NSFileManager alloc] init]; 

NSURL *directory = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.yellow"]; 
NSURL *pathToStore = [directory URLByAppendingPathComponent:kMagicalRecordDefaultStoreFileName]; 

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(id)pathToStore]; 
3

變化

[MagicalRecord setupCoreDataStackWithStoreNamed:@"Database"]; 

- (void)setupCoreDataStack 
{ 
    if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) 
    { 
     return; 
    } 

    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; 
    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 

    NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.yourgroup"]; 
    storeURL = [storeURL URLByAppendingPathComponent:@"Database.sqlite"]; 

    [psc MR_addSqliteStoreNamed:storeURL withOptions:nil]; 
    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:psc]; 
    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:psc]; 
} 
+1

我喜歡這個想法,基本上手動設置的東西,但要小心。你的第一行檢查defaultStoreCoordinator設置默認情況下會自動創建一個協調器,如果一個協調器不存在,那麼它總是非零,下面的代碼都不會運行。如果你想這樣做,你需要添加[MagicalRecordHelpers setShouldAutoCreateDefaultPersistentStoreCoordinator:NO] ;到那個方法的最頂端。 – 2015-03-03 19:40:19

相關問題