相关疑难解决方法(0)

Swift 3上的NotificationCenter问题

我正在学习Swift 3,我正在尝试使用它NSNotificationCenter.这是我的代码:

func savePost(){
    let postData = NSKeyedArchiver.archivedData(withRootObject: _loadedpost)
    UserDefaults.standard().object(forKey: KEY_POST)
}
func loadPost(){
    if let postData = UserDefaults.standard().object(forKey: KEY_POST) as? NSData{
        if let postArray = NSKeyedUnarchiver.unarchiveObject(with: postData as Data) as? [Post]{
                _loadedpost = postArray
        }
    }
    //codeerror
    NotificationCenter.default().post(NSNotification(name: "loadedPost" as NSNotification.Name, object: nil) as Notification)
}
Run Code Online (Sandbox Code Playgroud)

这是观察者:

override func viewDidLoad() {
    super.viewDidLoad()
//codeerorr
    NotificationCenter.default().addObserver(self, selector: Selector(("onPostLoaded")), name: "loadedPost", object: nil)
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
Run Code Online (Sandbox Code Playgroud)

它总是给我错误"信号SIGBRT".当我尝试在观察者中更改名称时,这不是错误,但显然它没有显示任何内容.我该如何解决?

ios notificationcenter swift3

91
推荐指数
4
解决办法
11万
查看次数

如何使用Swift #selector语法解决"模糊使用"编译错误?

[ 注意这个问题最初是在Swift 2.2下制定的.它已针对Swift 4进行了修订,涉及两个重要的语言更改:第一个方法参数external不再自动被抑制,并且选择器必须显式地暴露给Objective-C.

假设我的课程中有这两种方法:

@objc func test() {}
@objc func test(_ sender:AnyObject?) {}
Run Code Online (Sandbox Code Playgroud)

现在我想使用Swift 2.2的新#selector语法来创建一个与这些方法中的一个相对应的选择器func test().我该怎么做?当我尝试这个:

let selector = #selector(test) // error
Run Code Online (Sandbox Code Playgroud)

......我得到一个错误,"模糊地使用test()." 但如果我这样说:

let selector = #selector(test(_:)) // ok, but...
Run Code Online (Sandbox Code Playgroud)

......错误消失了,但我现在指的是错误的方法,一个参数的方法.我想引用没有任何参数的那个.我该怎么做?

[注意:这个例子不是人为的.NSObject有Objective-C copycopy:实例方法,Swift copy()copy(sender:AnyObject?); 所以问题很容易在现实生活中出现.]

selector swift

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

标签 统计

ios ×1

notificationcenter ×1

selector ×1

swift ×1

swift3 ×1