【问题标题】:iOS today extension causes Program ended with exit code: 0iOS 今日扩展导致程序以退出代码结束:0
【发布时间】:2016-10-26 01:25:04
【问题描述】:

我正在使用 Xcode 8.0、Swift 3。

我正在制作显示文本和图像的今天扩展程序,但经常导致此消息和今天扩展程序不起作用。 很少工作。

程序以退出代码结束:0

我在领域中保存了数据,今天使用数据(字符串,图像)进行扩展

是否会导致内存限制?那么,我怎样才能减少对今天扩展的记忆呢??

我的扩展代码:

class Information: Object {

    dynamic var Name = ""
    dynamic var Image : NSData?

    override class func primaryKey() -> String {
        return "Name"
    }
}

class TodayViewController: UIViewController, NCWidgetProviding {

    var realm : Realm?
    var results : Results<Information>?
    var index = 0

    @IBOutlet var NameLabel: UILabel!
    @IBOutlet var ImageView: UIImageView!

    @IBAction func leftAction(_ sender: UIButton) {
        guard index == 0 else {
            index -= 1
            loadData(index: index)
            return
        }
    }

    @IBAction func rightAction(_ sender: UIButton) {
        guard index == (results?.count)! - 1 else {
            index += 1
            loadData(index: index)
            return
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        setRealmFileURL()

        if #available(iOSApplicationExtension 10.0, *) {
            extensionContext?.widgetLargestAvailableDisplayMode = .expanded
        }else{
            preferredContentSize = CGSize(width: 0, height: 250)
        }
        // Do any additional setup after loading the view from its nib.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        realm = try! Realm()
        results = try! Realm().objects(Information.self) 
        loadData(index: index)

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    private func widgetPerformUpdate(completionHandler: ((NCUpdateResult) -> Void)) {
        // Perform any setup necessary in order to update the view.

        // If an error is encountered, use NCUpdateResult.Failed
        // If there's no update required, use NCUpdateResult.NoData
        // If there's an update, use NCUpdateResult.NewData
        loadData(index: index)

        completionHandler(NCUpdateResult.newData)
    }

    func loadData(index: Int){

        guard results?.count == 0 else {

            let objects = results?[index]
            NameLabel.text = objects?.Name
            ImageView.image = UIImage(data: (objects?.Image)! as Data, scale: 0.1)
            return

        }
    }

    @available(iOSApplicationExtension 10.0, *)
    func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
        preferredContentSize = CGSize(width: 0, height: 250)
    }

    func setRealmFileURL(){

        var config = Realm.Configuration(encryptionKey: getKey() as Data)
        let directory = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xxx")
        let realmPath = directory?.appendingPathComponent("xxx.realm")
        config.fileURL = realmPath

        Realm.Configuration.defaultConfiguration = config

    }
}

【问题讨论】:

    标签: ios swift3 xcode8 today-extension ios10-today-widget


    【解决方案1】:

    主要是内存问题。如果消耗太多,小部件将被切断。

    【讨论】:

    • 小部件扩展可以占用多少内存?我知道越少越好,但在上一代 iPad Pro 上,我目前使用 25Mb,并且小部件立即停止工作。
    【解决方案2】:

    除非应用程序中的某些内容需要更改,否则不要使用

    completionHandler(NCUpdateResult.NewData)
    

    改为使用

    completionHandler(NCUpdateResult.noData)
    

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 2017-01-19
      • 2015-05-23
      • 2018-05-29
      • 2013-04-19
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      相关资源
      最近更新 更多