小编Dmi*_*try的帖子

使用suiteName检测NSUserDefaults中的更改

在我的项目中,我使用app group将数据传输到apple watch!这看起来像这样

let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
sharedDefaults?.setObject(MyData, forKey: "DataKey")
sharedDefaults?.synchronize()
Run Code Online (Sandbox Code Playgroud)

在WKInterfaceController中,我使用以下代码获取数据:

let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let MyData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
Run Code Online (Sandbox Code Playgroud)

一切正常!

现在我尝试检测sharedDefaults中的数据?.objectForKey("DataKey")是否确实发生了变化.我尝试使用addObserver方法:

override func willActivate() {
NSUserDefaults(suiteName: "group.com.myappname.defaults")!.addObserver(self, forKeyPath: "DataKey", options: NSKeyValueObservingOptions.New, context: nil)
}

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
      print("Data Changed")
}
Run Code Online (Sandbox Code Playgroud)

但是"覆盖func observeValueForKeyPath"仅在WKInterfaceController激活时调用,并且当我在NSUserDefaults中更改数据时没有调用(suiteName:"group.com.myappname.defaults")

我也尝试使用NSNotificationCenter:

override func willActivate() {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChangeNotificationMethod(_:)), name: NSUserDefaultsDidChangeNotification, object: nil)
}

func userDefaultsDidChangeNotificationMethod(notification: NSNotification){
 print("Data Changed") …
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults ios swift watchkit watchos-2

10
推荐指数
1
解决办法
625
查看次数

有没有比我使用的更好的“漂亮打印”json 字符串的方法

我有 json 数据来自服务器端。

如果我使用下一个代码,我不会打印出漂亮的一行字符串:

print(String(bytes: jsonData, encoding: String.Encoding.utf8))
Run Code Online (Sandbox Code Playgroud)

为了使它打印得漂亮,我使用了下一个代码:

if let json = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) {
   if let prettyPrintedData = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) {
      print(String(bytes: prettyPrintedData, encoding: String.Encoding.utf8) ?? "NIL")
   }
}
Run Code Online (Sandbox Code Playgroud)

但似乎这不是最好的方法。

那么有人知道如何漂亮地打印传入的 jsonData 来打印它吗?

json pretty-print swift

8
推荐指数
4
解决办法
5945
查看次数

在swift的导航栏下添加进度条?

请问我如何在导航栏下添加ProgressView?我尝试在这篇文章中使用解决方案:在导航栏下添加进度条,但是代码是用ObjectiveC语言编写的......我尝试翻译成Swift.这是我在NavigationController SubClass中添加的代码

import UIKit
class CustomNavigationController: UINavigationController {

@IBOutlet var Secondprogress: UIProgressView!
override func viewDidLoad() {
    super.viewDidLoad()



    NSLayoutConstraint.deactivateConstraints(self.view.constraints())

    Secondprogress?.setTranslatesAutoresizingMaskIntoConstraints(false)




    var navBar = self.navigationController?.navigationBar
    Secondprogress.tag = 1
    self.view.addSubview(Secondprogress)

    var Constraint = NSLayoutConstraint(item: self.Secondprogress,
        attribute:NSLayoutAttribute.Bottom,
        relatedBy:NSLayoutRelation.Equal,
        toItem:navBar,
        attribute:NSLayoutAttribute.Bottom,
        multiplier:1.0,
        constant:-0.5);

    self.view.addConstraint(Constraint);

    Constraint = NSLayoutConstraint(item: self.Secondprogress,
        attribute:NSLayoutAttribute.Left,
        relatedBy:NSLayoutRelation.Equal,
        toItem:navBar,
        attribute:NSLayoutAttribute.Left,
        multiplier:1.0,
        constant:0);

    self.view.addConstraint(Constraint);

    Constraint = NSLayoutConstraint(item: self.Secondprogress,
        attribute:NSLayoutAttribute.Right,
        relatedBy:NSLayoutRelation.Equal,
        toItem:navBar,
        attribute:NSLayoutAttribute.Right,
        multiplier:1.0,
        constant:0);

    self.view.addConstraint(Constraint);

    Secondprogress.setTranslatesAutoresizingMaskIntoConstraints(false)

    Secondprogress.hidden = false
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() …
Run Code Online (Sandbox Code Playgroud)

uinavigationbar uinavigationcontroller uiprogressview ios swift

7
推荐指数
1
解决办法
7942
查看次数

RSBarcodes_Swift怎么用?

对不起谷歌翻译......

你好!我想了解Swift RSBarcodes库的使用.

  1. 如何分配变量扫描代码.

我试着这样做:

var MyVar:String = ""


     self.barcodesHandler = { barcodes in
            for barcode in barcodes {
                MyVar = barcode.stringValue
            }
        }
Run Code Online (Sandbox Code Playgroud)

但这没有效果:(

  1. 如何生成代码?

我试着这样做:

RSUnifiedCodeGenerator.shared.generateCode("2166529V", machineReadableCodeObjectType: AVMetadataObjectTypeCode39Code)
Run Code Online (Sandbox Code Playgroud)

但这没有效果:(我该怎么做才能看到生成的图像.我不明白.

也许有人对图书馆或工作示例有完整的描述.我会很感激.

对不起谷歌翻译......

code-generation scanning swift rsbarcodes

6
推荐指数
0
解决办法
652
查看次数

如果NSUserDefaults.standardUserDefaults()中的值发生更改,则调用函数

我有一个变量从NSUserDefaults.standardUserDefaults()变成值

var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int
Run Code Online (Sandbox Code Playgroud)

我有一个名为setGiftCount()的函数...

当变量GiftCount发生变化时,我需要调用此函数...怎么做?

variables nsuserdefaults swift swift2

3
推荐指数
2
解决办法
4809
查看次数

在后台线程中执行硬任务,在主线程中返回结果

我花了一些时间来寻找一个开发人员友好的解决方案(不向项目添加依赖项)如何在后台线程中执行一些艰巨的任务,并在任务完成后将结果返回到主线程。我找到了允许这样做的“AsyncTask”。但是要使用它,您需要为需要在后台运行的每个任务编写样板代码。我是 iOS 开发者,决定尝试 Android 相关的开发。所以在 Swift 中你可以简单地使用下一个代码来完成这个任务:

DispatchQueue.global().async(execute: {
      //Do some hard task in background
   DispatchQueue.main.async(execute: {
      //Return to main
   })
})
Run Code Online (Sandbox Code Playgroud)

这看起来很简单。但是在 Kotlin 中我没有找到这么简单的解决方案,并决定创建它。

这是我做的:

我创建了通用类

import android.os.AsyncTask

class BaseAsyncTask<M>: AsyncTask<()->M, Int, M>() {

    var completion: ((M)->Unit)? = null

    override fun doInBackground(vararg params: (() -> M)?): M? {
        for (p in params) {
            return p?.invoke()
        }
        return  null
    }

    override fun onPostExecute(result: M) {
        super.onPostExecute(result)

        completion?.invoke(result)
    }
}
Run Code Online (Sandbox Code Playgroud)

和经理

class AsyncManager {

    companion object {

        fun <M>execute(inBackground: ()->M, inMain: …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask kotlin

3
推荐指数
1
解决办法
1668
查看次数