首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过Swift 2.1中的NSNotificationCenter.defaultCenter()在NSArrayController中监听项目选择的正确方法是什么

在Swift 2.1中,通过NSNotificationCenter.defaultCenter()在NSArrayController中监听项目选择的正确方法是使用addObserver(_:selector:name:object:)方法来注册观察者。

具体步骤如下:

  1. 创建一个观察者对象,通常是当前的视图控制器或其他合适的对象。
  2. 在观察者对象中,使用addObserver(_:selector:name:object:)方法来注册观察者。参数说明如下:
    • observer:观察者对象,即接收通知的对象。
    • selector:接收到通知时要调用的方法。
    • name:通知的名称,可以是自定义的字符串。
    • object:发送通知的对象,如果为nil,则接收任何对象发送的通知。
  3. 在观察者对象中,实现接收通知时要调用的方法。方法的签名应为func methodName(notification: NSNotification),其中methodName为方法名,notification为NSNotification对象,用于获取通知的相关信息。

示例代码如下:

代码语言:swift
复制
class ViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建观察者对象
        let observer = self
        
        // 注册观察者
        NSNotificationCenter.defaultCenter().addObserver(observer, selector: #selector(ViewController.handleNotification(_:)), name: "ProjectSelectionNotification", object: nil)
    }
    
    // 接收通知时调用的方法
    @objc func handleNotification(notification: NSNotification) {
        // 处理通知
        if let userInfo = notification.userInfo {
            // 获取通知中的信息
            if let selectedProject = userInfo["selectedProject"] as? Project {
                // 处理选中的项目
            }
        }
    }
    
    deinit {
        // 在对象销毁时,移除观察者
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
}

在上述示例中,我们创建了一个名为"ProjectSelectionNotification"的自定义通知,并将观察者对象注册为接收该通知的对象。在接收到通知时,调用handleNotification方法进行处理。在handleNotification方法中,我们可以通过notification.userInfo获取通知中的信息,进一步处理选中的项目。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供可扩展的云服务器实例,满足各种计算需求。产品介绍链接
  • 腾讯云云数据库MySQL版:高性能、可扩展的云数据库服务,适用于各种规模的应用。产品介绍链接
  • 腾讯云云原生容器服务(TKE):基于Kubernetes的容器管理服务,简化容器化应用的部署和管理。产品介绍链接
  • 腾讯云人工智能平台(AI Lab):提供丰富的人工智能算法和工具,帮助开发者快速构建智能应用。产品介绍链接
  • 腾讯云物联网平台(IoT Hub):为物联网设备提供连接、管理和数据处理能力,支持海量设备接入。产品介绍链接
  • 腾讯云移动推送(TPNS):提供高效可靠的移动消息推送服务,帮助开发者实现消息通知功能。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发基础系列】UIAlertController专题

或许您可以看到带有otherButtonTitlesinit方法,但是很遗憾,这个方法是没有办法通过编译。...假定我们要让“登录”文本框至少有3个字符才能激活“好”按钮。很遗憾是,UIAlertController并没有相应委托方法,因此我们需要向“登录”文本框添加一个Observer。...,我们通过每个按钮动作handler代码块(还有其他任何可能释放视图控制器地方)添加合适代码来实现它。...(参考viewDidLoad方法设立observer示例代码)。     ...3 开发技巧 3.1 常见问题 3.1.1 集成键盘监听后,重复进入页面挂机问题         项目中,由于自定义AlertView中有用到textfield,故AlertView添加了键盘显示隐藏通知监听

53030

Swift 实现轻量属性监听系统

前言 本文主要目的是解决客户端开发对“模型一处修改,UI 要多处更新”问题。当然,我们要知晓解决方案细节和思考过程,以及看到其能达到效果。我们会用到函数式编程思想,以及伟大“泛型”。...如果一个问题有更好方法去解决,那为何不替换掉旧方法呢? 正文 假如你正在写 App 是有用户系统,也就是用户需要管理自己信息,如修改名字、头发颜色之类。...单独拿名字来说,除开在修改界面,可能在系统其他界面也会使用到它,这就涉及到更新名字后再更新其他界面的问题。 你第一直觉是什么呢?多半是使用通知,也就是 NSNotification。...通过 push,用户可以第 3 个界面里修改名字,这就需要更新这 3 个界面的名字,不然用户 pop 返回时就会觉得奇怪。...小结 我们面临一个“一处修改,多处更新”问题,起初时我们用通知来实现,并无不可。之后我们想要更合理(或者更酷)一些,于是利用 Swift 闭包特性实现了一个监听者模式。

85030
  • 【iOS开发】@objc private class func 与 Selector

    本文介绍 Swift 使用 KVO 时,一些需要注意事项,下面截取了两段我自己项目中使用代码。...比如,我们界面中有一个让用户输入年龄 UITextField,然后我们可以观察(监听),当发现用户在这里输入『0』时,我们就给一个提示:『年龄至少为1』。 简单介绍完毕,下面说注意事项。...private 关键字 最简单使用 Selector 情况,就是如上面所列出 NSTimer 写 selector 为 "moveText",然后我们同一个文件,再相应地写一个...那么你把这个动态特性再加回来就可以了~ 1.通过 @objc 关键字来使用动态特性 @objc private func moveText(){ // Your Code } 2.通过 dynamic...如果你愿意,可以写成下面这样: @objc private class func moveText(){ // Your Code } 我 StackOverFlow 回答,及其它相关:

    87410

    Mac开发之 Cocoa 绑定 入门

    好了,基础概念就先介绍到这里,我们先通过一个简单示例来具体了解绑定操作~ (1) 新建一个Cocoa应用程序,(示例开发语言使用Swift) 新建Cocoa应用 (2) 添加一个Person类,并添加一个...来构建工程,就会发现运行效果正确,这是因为Swift默认是关闭了KVO属性监听,我们只需要开启就可以了,Person类,给score属性前面,添加一个关键字dynamic,然后再来试试运行吧...(9)设置SwiftKVO 开启KVO (10) 通过改变score值来影响Label和Slider 实际项目中,更常用方式是score值变化,更新label和slider它们显示.下面我们通过点击鼠标来修改一下...,简化了开发步骤,同时也减少了Bug可能. 3.2 绑定到控制器 刚刚例子,我们将视图直接绑定在模型对象属性上,跳过了控制器,这种情况对应简单使用没有问题,但绑定还有更多使用方式,也许你签名例子已经注意到了...通过cocoa 绑定,我们没有写一行代码就实现了记录用户设置功能~ cocoa还为我们提供了其他控制器对象来处理应用程序数据访问,比如NSArrayController,可以处理一组数据集合,

    1.9K20

    设计模式(二):自己动手使用“观察者模式”实现通知机制

    通过一个小Demo对“观察者模式”进行学习后,紧接着会看一下Swift是如何使用Foundation框架通知,并给出相应示例。...BossregisterObserver()方法用来添加监听者(为了防止重复添加,我们添加前先进行移除),removeObserver()则是负责移除监听者,notifyObservers()是发送通知并调用观察者相应方法...(2)、下方方法就是通知中心发送通知过程了,对应着NSNotificationCenter.defaultCenter()postNotification(notifaction)。...(3)下方代码就是添加监听着了,与NSNotificationCenter.defaultCenter()addObserver()方法相对应。...上面是Swift2.1版本实现代码,Swift2.2Selector参数有所变化,在此还是需要说明一下,aSelector参数Swift2.2得使用#selector(类.方法),如下所示

    1.6K60

    ReactiveCocoa,最受欢迎iOS函数响应式编程库(2.5版),没有之一!

    self.loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) { // 这是一个假想 -logIn 方法,...异步操作上使用signals信号,让通过链接和转换这些signal信号,构建更加复杂行为成为可能.可以一组操作完成后,来触发此操作即可: // 执行两个网络操作,并在它们都完成后控制台打印信息..... // // 假想 -logInUser 方法,登录完成后,返回一个signal信号对象. // // -flattenMap: 无论任何时候,signal信号发送一个值,它block都将被执行...signal信号对象. // // -deliverOn: 创建一个新 signals 信号对象,以在其他队列来处理他们任务. // 在这个示例,这个方法被用来将任务移到后台队列,并在稍后下载完成后返回主线程...使用独立数据并行工作,然后最终将他们合并到一个结果,Cocoa是很琐碎,并且常常包含许多同步代码: __block NSArray *databaseObjects; __block NSArray

    1.2K91

    成为一名优秀 Swift 开发人员 10 个小技巧

    使用 Protocol Protocol Swift 可以做很多事情。使用协议,我们可以设计软件组件行为,使其符合特定实现。...此外,通过代码导航可以导航时更好地控制共享参数和特定行为。还可以避免让 Storyboard 变得一团糟。 5. 项目中集成最热门第三方库 尽量不要重新发明轮子。...为项目选择正确库是一项有意思工作,大多数情况下,使用基本库就正确做法。这可以让你专注于特定应用程序特定功能,而不是常见功能上浪费时间。...使用扩展并合理使用它们来创建公共库 我很喜欢 Swift 扩展。使用 Objective-C 时,我总是不情愿地使用继承。当然这并不总是错误正确使用子类也不会出错。...开发文档,通知是控制器与模型或服务之间实施通信可同步模式正确方法,我项目中经常使用 Notification Center,基本上实现了观察者模式,并让应用程序带有更多响应式元素。

    2.3K40

    设计iOS随系统键盘弹收和内容文字长度自适应高度文本框

    设计iOS随系统键盘弹收和内容文字长度自适应高度文本框     文本输入框是多数与社交相关app不可或缺一个控件,这些文本输入框应该具备如下功能: 1.键盘为弹起时,输入框悬浮在界面底部...使用autolayout布局技术加上对键盘相关监听,可以十分方便实现上述效果。首先在xib文件中进行相关约束添加,如下图: ?...初始化方法中进行通知注册和代理设置:     NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("...keyboardWillHidden:"), name: UIKeyboardWillHideNotification, object: nil)     ourTextField.delegate=self 实现通知监听方法如下...UIView.animateWithDuration(time) { () -> Void in             self.view.layoutIfNeeded()         }     } 监听键盘状态发送通知

    1.4K20

    iOS 点击通知打开对应页面

    通知被点击调用方法 设备接到apns发来通知,应用处理通知有以下几种情况: 1)....方法中进行判断是否通过点击通知进入app,设置全局变量,需要跳转页面根据全局变量进行跳转 2) 应用在前台或后台 在所有可跳转页面添加消息观察者 override func viewWillAppear...方法,发送消息 NSNotificationCenter.defaultCenter().postNotificationName("notificationPushView", object: nil...); 注意 添加观察者最好在viewWillAppear添加 viewWillDisappear移除 否则每次接受到推送都会打开页面,当然也可以进行判断当前页面已打开就不再打开 当然也可以不用通知去打开页面...只应用程序启动时执行一次。application参数用来获取应用程序状态、变量等,值得注意是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动原因。

    2.6K20

    Swift 3.0介绍

    编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 Swift历史版本中出现过调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),调用方法时则必须从第二个参数开始必须指定参数名等多种情况...,而在Swift3.0不管是函数还是方法都必须从第一个参数开始必须指定参数名(当然可以使用“_”明确指出调用时省略参数)。...之前Swift版本c是Int!...Swift3.0之前如果要定义协议可选方法,只需要给协议加上@objc之后方法使用optional修饰就可以了,但是Swift3.0除了协议需要@objc修饰,可选方法也必须使用@objc来修饰...,也因为Swift处于初级阶段,很多类库和方法命名都尽量和ObjC保持一致,使用Swift开发iOS应用处处可以看到ObjC影子。

    1.3K90

    Swift 3.0介绍

    编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 Swift历史版本中出现过调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),调用方法时则必须从第二个参数开始必须指定参数名等多种情况...,而在Swift3.0不管是函数还是方法都必须从第一个参数开始必须指定参数名(当然可以使用“_”明确指出调用时省略参数)。...之前Swift版本c是Int!...Swift3.0之前如果要定义协议可选方法,只需要给协议加上@objc之后方法使用optional修饰就可以了,但是Swift3.0除了协议需要@objc修饰,可选方法也必须使用@objc来修饰...,也因为Swift处于初级阶段,很多类库和方法命名都尽量和ObjC保持一致,使用Swift开发iOS应用处处可以看到ObjC影子。

    1.3K80

    Swift asyncawait

    async-await 是 WWDC 2021 期间 Swift 5.5 结构化并发变化一部分。Swift并发性意味着允许多段代码同时运行。...执行数据请求 } 如今Swift版本,使用完成闭包来定义方法仍然是可行,但它有一些缺点,async 却刚好可以解决。 你必须确保自己每个可能退出方法调用完成闭包。...一个不支持并发函数调用异步方法 第一次使用 async-awai t时,你可能会遇到这样错误。...为你项目选择正确 async-await 重构方法 这三个重构选项应该足以将你现有的代码转换为异步替代品。根据你项目规模和你重构时间,你可能想选择一个不同重构选项。...不再需要完成闭包,而在彼此之后调用多个异步方法可读性也大大增强。一些新错误类型可能会发生,通过确保异步方法是从支持并发函数调用,同时不改变任何不可变引用,这些错误将可以得到解决。

    3.5K30

    Swift2.1-继承继承

    Swift,继承是基本,从Swift其他类型来区分类一种行为。...Swift类可以调用和访问方法,属性和属于它们父类下标脚本,并且提供它们自己重写方法,属性和下标脚本来定义或修改它们行为。...Swift会确保你重写是正确通过检查,重写定义都有一个与之匹配父类定义。 类也可以向继承属性添加属性监听者,当属性值改变了以便通知。...override关键词也提供Swift编译器检查,你重写类父类(或者父类父类)有一个声明来匹配你提供重写。检查确保你重写定义是是正确。...someMethod()重写方法实现,调用父类someMethod()方法。 一个命名为someProperty重写属性当通过super。

    45510

    Swift asyncawait ——代码实例详解

    前言 async-await 是 WWDC 2021 期间 Swift 5.5 结构化并发变化一部分。Swift 并发性意味着允许多段代码同时运行。...执行数据请求 } 如今 Swift 版本,使用完成闭包来定义方法仍然是可行,但它有一些缺点,async 却刚好可以解决。 你必须确保自己每个可能退出方法调用完成闭包。...调用异步方法 一个不支持并发函数调用异步方法 第一次使用 async-await 时,你可能会遇到这样错误。...为你项目选择正确 async-await 重构方法 这三个重构选项应该足以将你现有的代码转换为异步替代品。根据你项目规模和你重构时间,你可能想选择一个不同重构选项。...一些新错误类型可能会发生,通过确保异步方法是从支持并发函数调用,同时不改变任何不可变引用,这些错误将可以得到解决。

    2.7K10

    iOS蓝牙开发如何更好地收发数据

    3月旬跳槽了,一直新公司「填坑」,看着「先人」写代码,觉得是有改善空间,所以这次想聊下这部分内容——iOS蓝牙开发如何更好地更好地收发数据。...我们先简单回顾一下整个蓝牙数据接收一般流程: 1、蓝牙不断地广播信号; 2、APP扫描; 3、发现设备(根据名称或「服务」UUID来辨别是不是我们要连接设备); 4、连接(成功); 5、调用方法发现...「服务」; 6、调用方法发现服务」里「特征」; 7、发现硬件用于数据输人「特征」,保存(APP发送数据给硬件时要用到这个「特征」); 8、发现硬件用于数据输出「特征」,进行「监听」(硬件就是从这个..._:forCharacteristic characteristic:)监听对应特征,才能在上述方法拿到数据。...其实这里有个坑,当单个数据大小为2字节或以上时,我们用UInt16或UInt32去定义,会有「自动对齐」问题,就是接到数据,没有按指令定义顺序对齐,导致数据不正确,这时候可以struct后面加关键字

    2.8K32

    使用 Swift 创建简单二维码扫描应用

    再拷贝 Consumer Secret,粘贴到Constants.swift 文件 DISCOGS_SECRET 。 同 URL 一样,现在我们可以应用很方便地使用这些变量了。 ?... viewWillAppear() 方法,我们让 session 开始运行。相应 viewWillDisappear() 方法,让 session 停止运行。 ?...Album 模型 专辑数据模型 Album.swift ,需要将专辑模型转化为我们想要数据。... viewDidLoad() 方法,设置 labels 内容,提示用户开始扫描。我们需要添加 observer 来监听 NSNotification 从而接收通知。...同时需要在 deinit 移除监听者。 ? 当监听到通知时候,setLabels() 方法将会被调用。这里我们将使用 DataService.swift 原始字符串来初始化Album 对象。

    1.9K20

    Rust web 框架现状【2021 年 1 季度】

    本文中,我们将讨论 web 框架是什么,并在前端和后端开发,关于当前框架使用,提供一些建议。 web 框架是什么?...它是为了让开发人员能够 Rust 创建成熟 JavaScript 应用而精心设计通过语言之间提供简单 API 绑定,以提高速度和性能。...概述: 稳定:是 生产就绪:是 项目规模:小、、大 Gotham Gotham 是一个灵活 web 框架,为稳定版 Rust 构建。其是静态类型,从而确保应用程序在编译时总是正确表达。...概述: 稳定:是 生产就绪:是 项目规模:小、、大 Rouille Rouille 是一个微框架,它通过一个监听 socket 解析 HTTP 请求,采用线性请求和响应设计。...它们也都被 Rust 社区所接受,并且各自框架社区都提供了完善支持库。 结语 Rust web 开发,为前端或后端开发项目选择正确 web 框架时,必须考虑以下几点:框架是否稳定?

    2.8K11

    是什么使代码 “Swifty”? —— Fast

    毕竟,编写高性能代码主要部分在于测量,微调和再次测量。但是,使我们代码性能方面与Swift本身更加一致一种方法是,充分利用标准库所提供功能——特别是处理集合(例如字符串)时。...就像我们 Swift:字符串解析和Swift:集合切片中看过一样,Swift标准库针对性能进行了高度优化,并且使我们能够以高效方式执行许多常见集合操作-假设我们使用正确API。...例如,从字符串删除一组特定字符一种常见方法是使用旧ReplacementOccurences(of:with :)API,该API是SwiftString类型从其表亲Objective-CNSString...值得庆幸是,Swift通常不需要我们性能代码和优雅代码之间进行选择,我们要做就是切换到一种更合适API,Set这个API仅通过我们字符串一次即可删除其中包含每个字符。...关于Fast内容 附几个简单性能优化例子: 在这篇文章也是用到了文中这个方法iOS - DeviceToken 解析来解析Token swift filter会创建全新数组,且会对所有元素进行操作

    75010

    根据Git推算程序员大佬作息:同样是熬夜,为什么他发量那么多?

    这位程序员小哥通过「代码」查询了几位程序员大佬工作日及周末工作时间,其中包括 Linus 之父 Linus Torvalds、Go 语言之父 Rob Pike、PHP 之父 Rasmus Lerdorf...程序员重要产出——代码,通常存储版本控制系统(VCS),将代码上传到 VCS 系统时间点均被记录下来。其中最流行版本控制系统是 git。每次上传代码就是一次「commit」。...该项目选择了他 Go 语言项目上活动记录。 ? 从工作规律上来看,似乎和 Linus 类似,但是发量就少多了。相对而言,Rob commit 时间更加集中。 ?...「仁慈独裁者」Python 之父 Guido van Rossum CPython 项目的活动记录如下: ? 可怕 commit 量,即使凌晨也保持一定数量,简直是程序员战斗机。...Chirs Lattner 是 LLVM 编译器和 Swift 语言作者。他曾在苹果公司工作,并短暂就职于特斯拉,现任职于谷歌。 以下是根据他 Swift 语言项目上活动时间统计出结果: ?

    80720
    领券