在IOS 9中我尝试了一个新的功能:在我的应用程序中的内容阻断剂(广告阻断剂),我有3项(网站),我想阻止(例如: 1. abc.com 2. def.com 3. xyz.com)与每一项,我使用开关控制(开/关),以便用户选择块或不阻塞网站。
当开关的状态改变时,我想要重新加载文件blockerList.json.但我不知道该怎么做。
发布于 2016-01-20 02:01:48
我找到了解决问题的办法
步骤1:您需要在“我的应用程序”和“内容存储库扩展”之间共享数据。(你为“我的应用程序”和“内容存储库扩展”创建“应用程序组”。使用NSUserDefault保存和共享数据)。
将数据保存在“我的应用程序”中
private let APP_GROUPS = "group.com.xxx"
let defaults: NSUserDefaults! = NSUserDefaults(suiteName: APP_GROUPS)
if (SWITCH_1 is ON) {
idListBlocker = 1
}
if (SWITCH_2 is ON) {
idListBlocker = 2
}
defaults.setObject(idListBlocker, forKey: "idBlock")
defaults.synchronize()步骤2:当您更改开关状态以阻止/不阻塞时,调用函数重新加载文件列表阻塞内容(blockerList.json)
if #available(iOS 9.0, *) {
SFContentBlockerManager.reloadContentBlockerWithIdentifier("Your Bundle Identifier of Content Blocker Extension", completionHandler: nil)
}步骤3:在文件ActionRequestHandler.swift中,加载与用户选择的选项开关对应的文件列表阻塞内容
private let APP_GROUPS = "group.com.xxx"
func beginRequestWithExtensionContext(context: NSExtensionContext) {
let defaults = NSUserDefaults(suiteName: APP_GROUPS)
let idBlock: Int? = defaults!.objectForKey("idBlock") as? Int
if idBlock == 1 {
let attachment = NSItemProvider(contentsOfURL: NSBundle.mainBundle().URLForResource("blockerList", withExtension: "json"))!
let item = NSExtensionItem()
item.attachments = [attachment]
context.completeRequestReturningItems([item], completionHandler: nil);
} else if idBlock == 2 {
let attachment = NSItemProvider(contentsOfURL: NSBundle.mainBundle().URLForResource("blockerList_1", withExtension: "json"))!
let item = NSExtensionItem()
item.attachments = [attachment]
context.completeRequestReturningItems([item], completionHandler: nil);
}
}与用户选择的选项相对应,您将创建一个阻止内容的文件列表。例:我的项目我创建了2个文件阻塞的内容: blockerList.json和blockerList_1.json。
这是我的解决方案,工作正常。
https://stackoverflow.com/questions/34781448
复制相似问题