有没有办法检索知道其URL的NSPersistentStore?
类似的东西:
NSURL *url = @"aaa\bbbb\ccc\xyz.sqlite"
NSPersistenStore *ps =[NSPersistentStore persistentStoreFromURL: url];
[self DoSomethingWith: ps];
**显然'persistentStoreFromURL'方法不存在!
额外信息:
我知道这个商店已加载到一些协调员(我不知道哪一个),我必须先将其从协调器中删除,然后再将其数据迁移到另一个商店。我只知道这家商店的网址。
我正在同时使用几个协调员。我想避免循环遍历它们然后再遍历所有他们的商店以检查store.URL是否等于url。这就是我要问的是,是否有可能直接从其网址获取商店,然后让它的协调员完成所有循环。
答案 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:
中所述
您还需要一位商店协调员。
但是,如果要从协调器中删除存储,则需要访问协调器,否则无法删除它。您可以向NSPersistentStore
询问其persistentStoreCoordinator
。还支持迁移商店,具体取决于您实际想要实现的目标。请注意,迁移到其他商店可能会导致UI问题。
如果您只有一个URL,则需要询问协调员是否已分配给商店。我认为没有其他方法可以开箱即用。