无法从扩展程序读取coredata

时间:2017-10-10 16:27:32

标签: ios swift core-data share-extension

我有一个应用程序,可以在<td align="center" valign="top"> <input id="reports11.selected1" name="reports[11].selected" onclick="javascript:doCheckbox(11, false)" style="margin-top:5px" type="checkbox" value="true"> <input type="hidden" name="_reports[11].selected" value="on"> <input id="reports11.productClassId" name="reports[11].productClassId" type="hidden" value="1"> <input id="reports11.productId" name="reports[11].productId" type="hidden" value="99599"> <input id="reports11.name" name="reports[11].name" type="hidden" value="Product Build - TEST"> </td> <td align="center" valign="top"> <select id="reports11.priority" name="reports[11].priority" style="width:40px;padding:1px;margin: 0 0 0 0" onchange="javascript:doPriority(11)"> <option value="0" selected="selected">--</option> </select> </td> <td valign="top"> Product Build - TEST </td> 中存储一些信息并读取它们。 我正在编写此应用程序的邮件扩展名,并且我希望此扩展程序读取相同的数据,但我总是有空的响应。

以下是我在主应用中使用的代码:

coredata

我在扩展程序中使用完全相同的代码,但它不会读取数据。 我想知道的是,我没有在代码中的任何地方使用context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext fetchImages(Date()){ (array, arrayData) in for image in array{ imagesArray.insert(image, at:0) } }

我该如何做到这一点?

感谢。

以下是appGroupIdentifier函数的代码:

fetchImages

1 个答案:

答案 0 :(得分:3)

启用应用组是第一步,但现在您需要告知Core Data使用应用组。

首先,您从FileManager获取共享组容器的位置。使用containerURL(forSecurityApplicationGroupIdentifier:)获取目录的文件URL。

如果需要,您可以使用该URL而无需更改。在其中创建一个子目录以保存Core Data文件可能是个好主意。如果您这样做,请在appendingPathComponent()上使用URL方法向网址添加目录名称。然后使用FileManager使用createDirectory(at:withIntermediateDirectories:attributes:)方法创建新目录。

现在您有一个要使用的共享目录,请告诉NSPersistentContainer将其文件放在那里。您可以使用NSPersistentStoreDescription执行此操作。初始化程序可以使用一个URL来告诉它存储数据的位置。

您的代码将近似于此:

let directory: URL = // URL for your shared directory as described above
let containerName: String = // Your persistent container name

let persistentContainer = NSPersistentContainer(name: containerName)
let persistentStoreDirectoryUrl = directory.appendingPathComponent(containerName)

guard let _ = try? FileManager.default.createDirectory(at: persistentStoreDirectoryUrl, withIntermediateDirectories: true, attributes: nil) else {
    fatalError()
}

let persistentStoreUrl = persistentStoreDirectoryUrl.appendingPathComponent("\(containerName).sqlite")

let persistentStoreDescription = NSPersistentStoreDescription(url: persistentStoreUrl)
persistentContainer.persistentStoreDescriptions = [ persistentStoreDescription ]

persistentContainer.loadPersistentStores {
    ...
}