我有一个根UIViewController,它的NSManagedObjectContext var由AppDelegate设置(iOS8 app使用Swift编码)。
根控制器(splitview控制器的主视图)有一个按钮,其动作呈现另一个具有以下代码段的UIViewController:
signed char c = 0xAF; // probably gives an overflow warning
int i = c; // extra 24 bits are all 1
assert( i == 0xFFFFFFAF );
我收到如下编译错误: '的UIViewController'没有名为' managedObjectContext'的成员对于代码行:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("addGeometricEntityContent") as! UIViewController
vc.managedObjectContext = self.managedObjectContext
self.presentViewController(vc, animated: true, completion: nil)
我尝试将一个简单的testPrint()函数添加到呈现的UIView控制器作为测试,并得到类似的抱怨,vc实例确实有一个方法testPrint()
storyboard.instantiateViewControllerWithIdentifier创建的vc实例是否与完全实例化的对象有所不同?
如果我删除该行
vc.managedObjectContext = self.managedObjectContextas a test
代码按预期工作并呈现UIViewController实例。
答案 0 :(得分:0)
可以从任何地方访问应用程序委托对象,因此您可以在视图控制器中编写
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedObjectContext = appDelegate.managedObjectContext
答案 1 :(得分:0)
我能够通过将UIViewController类型向下转换为我的特定控制器类型来解决问题,如下所示:
(defparameter *earth-radius* 6372.8)
(defparameter *e* (exp 1))
(defparameter *rad-conv* (/ pi 180))
(defun km->miles (km)
(* km .621371))
(defun miles->km (miles)
(* miles 1.60934))
(defun mph->mpm (mph)
(/ mph 60))
(defun kph->kpm (kph)
(/ kph 60))
(defun deg->rad (deg)
(* deg *rad-conv*))
(defun haversine (x)
(expt (sin (/ x 2)) 2))
(defun dist-rad (lat1 lng1 lat2 lng2)
(let* ((hlat (haversine (- lat2 lat1)))
(hlng (haversine (- lng2 lng1)))
(root (sqrt (+ hlat (* (cos lat1) (cos lat2) hlng)))))
(* 2 *earth-radius* (asin root))))
(defun dist-deg (lat1 lng1 lat2 lng2)
(dist-rad (deg->rad lat1)
(deg->rad lng1)
(deg->rad lat2)
(deg->rad lng2)))
;acos(sin(lat2)-sin(lat1)*cos(d)) / (sin(d)*cos(lat1))
(defun course-calc (lat1 lng1 lat2 lng2)
(acos(/(*(- (sin(lat2)) (sin(lat1))) (cos(dist-rad lat1 lng1 lat2 lng2))) (* (sin(dist-rad lat1 lng1 lat2 lng2)) (cos(lat1))))))
(defun course (lat1 lng1 lat2 lng2)
(if (< (sin (- lng1 lng2)) 0)
(course-calc lat1 lng1 lat2 lng2)
(-(* 2 pi)(course-calc lat1 lng1 lat2 lng2))))