gpt4 book ai didi

ios - ViewController 没有名为 managedObjectContext 的成员

转载 作者:可可西里 更新时间:2023-10-31 23:44:41 28 4
gpt4 key购买 nike

我正在尝试在 popoverpresentationviewcontroller 中使用 coredata,但它一直说我名为 PopoverVC 的 View Controller 没有名为 managedObjectContext 的成员。

我试过:

<强>1。在 init 中为 PopoverViewController 初始化:

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

self.appDelegate = (UIApplication.sharedApplication().delegate) as! AppDelegate
self.managedObjectContext = appDelegate.managedObjectContext!
}

<强>2。从另一个 View Controller 传递它,我只是通过调用 App Delegate 得到它

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
switch(segue.identifier!) {
case "popOverSegue":
let controller = segue.destinationViewController as! PopoverVC
controller.managedObjectContext = self.managedObjectContext!
break
default:
break
}
}

通常我可以通过以下方式在任何其他 View Controller 中访问它:

((UIApplication.sharedApplication().delegate) as! AppDelegate).managedObjectContext

我听说这可能是不好的做法,但这在这个弹出 View Controller 中甚至不起作用。其他 stackoverflow 问题的解决方案均无效。

编辑,下面是我的 PopoverViewController 类的样子,包括所有这些以确保它不是某个地方破坏代码的愚蠢语法错误。我现在将 managedObjectContext 声明为 getter 属性。仍然是同样的错误。

class PopoverViewController: UIViewController, UIPopoverPresentationControllerDelegate, UIPickerViewDelegate {

@IBOutlet weak var testingLabel: UILabel!
@IBOutlet weak var aPicker: UIPickerView!

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

//cancel button
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: "tapCancel:")

// popover settings
modalPresentationStyle = .Popover
popoverPresentationController!.delegate = self

self.preferredContentSize = CGSize(width:400,height:600)
}

//var appDelegate: AppDelegate
//var managedObjectContext:NSManagedObject
var appDelegate: AppDelegate {
return UIApplication.sharedApplication().delegate as! AppDelegate
}

var managedObjectContext: NSManagedObjectContext {
return self.appDelegate.managedObjectContext!
}

var pickerData = ["Mozzarella","Gorgonzola","Provolone","Brie","Maytag Blue","Sharp Cheddar","Monterrey Jack","Stilton","Gouda","Goat Cheese", "Asiago"]

let fetchRequest = NSFetchRequest(entityName: "Region")


var fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as [Region]
//pickerData = fetchResults

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
return 2
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return pickerData.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{
//return pickerData[row]
}

@IBInspectable var popoverOniPhone:Bool = false
@IBInspectable var popoverOniPhoneLandscape:Bool = true

func adaptivePresentationStyleForPresentationController(PC: UIPresentationController) -> UIModalPresentationStyle{

//this methods is only called by System when the screen has compact width

//return .None means we still want popover when adaptive on iPhone
//return .FullScreen means we'll get modal presetaion on iPhone

switch(popoverOniPhone, popoverOniPhoneLandscape){
case (true, _): // always popover on iPhone
return .None

case (_, true): // popover only on landscape on iPhone
let size = PC.presentingViewController.view.frame.size
if(size.width>320.0){ //landscape
return .None
}else{
return .FullScreen
}

default: // no popover on iPhone
return .FullScreen
}


}

func presentationController(_: UIPresentationController, viewControllerForAdaptivePresentationStyle _: UIModalPresentationStyle)
-> UIViewController?{
return UINavigationController(rootViewController: self)
}

func tapCancel(_ : UIBarButtonItem) {
//tap cancel
dismissViewControllerAnimated(true, completion:nil);
}

最佳答案

您已将 managedObjectContext 声明为只读计算属性,因此您无法为其赋值。

要使用您在 prepareForSegue 中的赋值,您需要将其设为直接的可选属性 -

var managedObjectContext: NSManagedObjectContext?

关于ios - ViewController 没有名为 managedObjectContext 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31780169/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com