Tag: 键值观察

我怎样才能做关键值观察,并得到一个UIView帧的KVOcallback?

我想观察UIView frame , bounds或center属性的变化。 我怎样才能使用键值观察来实现呢?

KVO和ARC如何删除Observer

如何从ARC下的对象中移除观察者? 我们只是添加观察者而忘记删除它? 如果我们不再手动pipe理内存,那么我们在哪里放弃观察? 例如,在视图控制器上: [self.view addObserver:self forKeyPath:@"self.frame" options:NSKeyValueObservingOptionNew context:nil]; 以前,我会在视图控制器的dealloc方法中调用removeObserver:

我怎么知道一个对象是否有一个关键值观察者附加

如果你告诉一个客观的c对象移除观察者:对于一个关键path而且这个关键path还没有被注册,它就会破坏sads。 喜欢 – '不能删除关键path“theKeyPath”的观察者,因为它没有注册为观察者。 有没有办法确定一个对象是否有注册的观察者,所以我可以这样做 if (object has observer){ remove observer } else{ go on my merry way }

观察一个NSMutableArray插入/删除

一个类有一个types为NSMutableArray的属性(和实例@property )和合成访问器(通过@property )。 如果你观察这个数组,使用: [myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL]; 然后像这样在数组中插入一个对象: [myObj.theArray addObject:NSString.string]; 一个observeValueForKeyPath …通知不会被发送。 但是,以下内容会发送正确的通知: [[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string]; 这是因为mutableArrayValueForKey返回一个代理对象,负责通知观察者。 但是,不应该合成访问器自动返回这样一个代理对象? 什么是正确的方法来解决这个问题 – 我应该写一个自定义访问器,只是调用[super mutableArrayValueForKey…] ?

关键值观察(KVO)在Swift中是否可用?

如果是这样的话,在Objective-C中使用键值观察时,是否存在其他不存在的关键差异?

视图控制器之间进行通信的最佳方式是什么?

作为Objective-C,cocoa和iPhone开发者的新手,我强烈渴望从语言和框架中获得最大的收益。 我正在使用的资源之一是斯坦福大学的CS193P课堂笔记,他们已经离开了networking。 它包括讲义,作业和示例代码,由于课程是由苹果开发者提供的,我绝对认为它是“从马口”。 class级网站: http://www.stanford.edu/class/cs193p/cgi-bin/index.php 08讲座涉及到一个分配,build立一个基于UINavigationController的应用程序,有多个UIViewControllers推到UINavigationController堆栈上。 这就是UINavigationController的工作原理。 这是合乎逻辑的。 但是,幻灯片中有一些关于你的UIViewControllers之间的沟通的严重警告。 我要引用这个严肃的幻灯片: http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf 页面16/51: 如何不共享数据 全局variables或单身人士 这包括您的应用程序委托 直接的依赖性使得你的代码更加可重用 而且更难debugging 好。 我对此感到失望。 不要盲目折腾所有用于viewcontroller与应用程序委托之间的通信的方法,并在应用程序委托方法中引用viewcontroller实例。 公平'nuff。 再进一步,我们得到这张幻灯片告诉我们该怎么做。 页面18/51: 数据stream的最佳实践 找出需要传达的信息 为您的视图控制器定义input参数 为了进行通信备份,请使用松耦合 为观察者定义一个通用接口(如委派) 这张幻灯片之后是一个看起来像一个占位符的幻灯片,然后讲师用UIImagePickerController的例子显然演示了最佳实践。 我希望video可用! 🙁 好的,所以…恐怕我的东西不太强。 上述报价中的最后一行我也有点困惑。 我在这方面一直在做相关的search,我发现看起来像是一篇体面的文章,谈论观察/通知技术的各种方法: http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html 方法#5甚至指示代表作为一种方法! 除了….对象一次只能设置一个委托。 所以当我有多个viewcontroller通信,我该怎么办? 好的,那就是组build团伙。 我知道我可以在appdelegate中通过引用多个viewcontroller实例轻松地在应用程序委托中完成我的通信方法,但是我想以正确的方式执行这种事情。 请回答以下问题,帮助我“做正确的事情”: 当我尝试在UINavigationController堆栈上推送一个新的viewcontroller时, 谁应该这样做。 我的代码中哪个类/文件是正确的地方? 当我在一个不同的 UIViewController中想要在我的一个UIViewController中影响一些数据(一个iVar的值)时,什么是“正确”的方法呢? 假设我们只能在一个对象中一次设置一个委托,当讲师说“为观察者定义一个通用接口(如委派)”时,实现将会是什么样子? 如果可能的话,一个伪代码示例将非常有用。