首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:在iOS 9中重新加载内容阻止程序列表

Swift:在iOS 9中重新加载内容阻止程序列表
EN

Stack Overflow用户
提问于 2016-01-14 03:53:45
回答 1查看 995关注 0票数 3

在IOS 9中我尝试了一个新的功能:在我的应用程序中的内容阻断剂(广告阻断剂),我有3项(网站),我想阻止(例如: 1. abc.com 2. def.com 3. xyz.com)与每一项,我使用开关控制(开/关),以便用户选择块或不阻塞网站。

当开关的状态改变时,我想要重新加载文件blockerList.json.但我不知道该怎么做。

EN

回答 1

Stack Overflow用户

发布于 2016-01-20 02:01:48

我找到了解决问题的办法

步骤1:您需要在“我的应用程序”和“内容存储库扩展”之间共享数据。(你为“我的应用程序”和“内容存储库扩展”创建“应用程序组”。使用NSUserDefault保存和共享数据)。

将数据保存在“我的应用程序”中

代码语言:javascript
复制
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)

代码语言:javascript
复制
if #available(iOS 9.0, *) {
            SFContentBlockerManager.reloadContentBlockerWithIdentifier("Your Bundle Identifier of Content Blocker Extension", completionHandler: nil)
        }

步骤3:在文件ActionRequestHandler.swift中,加载与用户选择的选项开关对应的文件列表阻塞内容

代码语言:javascript
复制
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。

这是我的解决方案,工作正常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34781448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档