在Objective-C中,我通常会使用这样的东西:
static NSString *kViewTransformChanged = @"view transform changed";
// or
static const void *kViewTransformChanged = &kViewTransformChanged;
[clearContentView addObserver:self
forKeyPath:@"transform"
options:NSKeyValueObservingOptionNew
context:&kViewTransformChanged];
Run Code Online (Sandbox Code Playgroud)
我有两个重载方法可供选择,为KVO添加一个观察者,唯一的区别是context参数:
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, context: CMutableVoidPointer)
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, kvoContext: KVOContext)
Run Code Online (Sandbox Code Playgroud)
由于Swift不使用指针,我不确定如何取消引用指针以使用第一种方法.
如果我创建自己的KVOContext常量以便与第二种方法一起使用,我最终会问它:
let test:KVOContext = KVOContext.fromVoidContext(context: CMutableVoidPointer)
Run Code Online (Sandbox Code Playgroud)
编辑:CMutableVoidPointer和KVOContext有什么区别?有人可以给我一个例子,说明如何使用它们以及何时使用它们?
编辑#2:苹果公司的开发人员刚刚将这个发布到了论坛:KVOContext正在消失; 使用全局引用作为您的上下文是现在的方法.
我正在尝试遍历OS X上用户的照片库。在iOS上,我将使用Photos框架,但是显然在OS X上不可用,而我们应该使用Media Library框架。但是,尽管我可以使用上面链接的代码来访问MLMediaSource对象,但我很难确定如何遍历照片资产。
该媒体库框架文档提到了一个mediaObjectForIdentifier:方法,这听起来前途,但并不表明排序标识符应该用什么。我对iOS有相当的经验,但是在OS X上是完整的n00b,所以我感到有些迷茫。
如果我只是想遍历用户库,NSLog对每张照片进行处理,那我该怎么办?是使用Media Library Framework,还是使用其他框架(只要它适用于当前的Photos库)?