8

我想管理我的代理类之一中的所有位置代码。由于该类是从头开始构建的,而不是在UIView继承的或类似的类上构建的,因此它会引发错误“当我尝试添加时NSObjectProtocol不符合协议。NSObjectProtocolCLLocationManagerDelegate

class GeoProxy : Proxy, CLLocationManagerDelegate
{
   var locationManager = CLLocationManager()

   override class var NAME: String { return "GeoProxy" }
}

任何想法,我如何在不添加所有功能的情况下让类符合NSObjectProtocol

4

2 回答 2

12

更简单的方法是让Proxy类继承自NSObject

class Proxy: NSObject {
}

然后,所有子类都将符合NSObjectProtocol. 此外,这些类将与 Objective-C 代码兼容。

于 2015-12-14T12:47:27.053 回答
5

最好将CLLocationManagerDelegate相关代码放在viewComponent( UIViewController) 中并从那里处理事情,UIViewController 已经继承自,NSObject因此无需更改 PureMVC 的核心参与者(Notifier在这种情况下)。

另一种选择是创建一个独立的类来管理与位置相关的活动,例如实例化一个 MediatorLocationMediator实例化它的 viewComponent 并通过协议class Location: NSObject, CLLocationManagerDelegate将自己设置为委托。ILocation

LocationMediator将通过委托从它的 viewComponent 监听任何事件,ILocation然后它会发送一个通知,其他感兴趣的参与者可以响应。

硬件相关活动属于 View

任何与硬件相关的活动,例如相机、GPS、加速度计、陀螺仪和非硬件元素(如浏览器中的路由器)通常会生成事件并属于 MVC 范例的视图层,应在视图组件内处理。如果需要与系统的其他部分通信,viewComponents 中的任何触发事件都将由它的中介处理。Proxy最适合 Web 服务或持久性。

于 2016-03-27T15:25:43.320 回答