有没有办法检索知道其URL的NSPersistentStore?

时间:2014-03-27 12:17:59

标签: ios objective-c core-data nspersistentstore

有没有办法检索知道其URL的NSPersistentStore?

类似的东西:

NSURL *url = @"aaa\bbbb\ccc\xyz.sqlite"

NSPersistenStore *ps =[NSPersistentStore persistentStoreFromURL: url];

[self DoSomethingWith: ps];

**显然'persistentStoreFromURL'方法不存在!

额外信息

我知道这个商店已加载到一些协调员(我不知道哪一个),我必须先将其从协调器中删除,然后再将其数据迁移到另一个商店。我只知道这家商店的网址。

我正在同时使用几个协调员。我想避免循环遍历它们然后再遍历所有他们的商店以检查store.URL是否等于url。这就是我要问的是,是否有可能直接从其网址获取商店,然后让它的协调员完成所有循环。

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式从持久性商店协调员获取当前商店:

    NSURL *url = @"aaa\bbbb\ccc\xyz.sqlite"
    NSPersistentStoreCoordinator *yourPSC = self.psc // Create or obtain reference to your psc

    NSPersistentStore *ps = [yourPSC persistentStoreForURL:url];

    [self DoSomethingWith: ps];

如果您不知道哪个psc在网址中包含商店,请检查yourPSC.persistentStores是否包含具有相同网址的商店。

像这样:

   for (NSPersistentStore *store in yourPSC.persistentStores) {
       if ([store.URL isEqual:url]) {
           [yourPSC removePersistentStore:store error:nil];
       }
   }

答案 1 :(得分:0)

您必须使用指定的初始化程序

初始化NSPersistentStore
initWithPersistentStoreCoordinator:configurationName:URL:options:

Apple documentation

中所述

您还需要一位商店协调员。

但是,如果要从协调器中删除存储,则需要访问协调器,否则无法删除它。您可以向NSPersistentStore询问其persistentStoreCoordinator。还支持迁移商店,具体取决于您实际想要实现的目标。请注意,迁移到其他商店可能会导致UI问题。

如果您只有一个URL,则需要询问协调员是否已分配给商店。我认为没有其他方法可以开箱即用。