更改值

时间:2015-09-10 23:27:43

标签: ios swift class core-data

我正在尝试将数据从CollectionViewController传递到MasterViewControllerSplitViewControllerclass的一部分。我能想到的唯一方法是在单独的文件中创建SplitViewController以将托管对象保存为类属性值,然后引用prepareForSegue中的类。 (因为我不能使用SplitViewController方法,因为我正在MasterViewController而不是直接class)。

  

致命错误:在解包可选值时意外发现nil

我知道这种情况正在发生,因为property nil的值为SplitViewController,因此CollectionViewController崩溃了。但是当在SplitViewController方法中输出值时,值不会返回nil,那么为什么类属性在class ObjectClass { var selectedObject: Object! } 中的值为nil?

我是Swift的新手,但不是类的引用类型所以我更改了它的属性并从另一个控制器访问它们:/

这就是我的项目设置方式;

enter image description here

我的班级:

managed objects

CollectionViewController

在此,我将所有array提取到class以显示,然后使用prepare for segue将托管对象存储到property property。但它似乎没有保存任何东西,因为我在下一个控制器中得到nil override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showObject" { let indexPaths = self.collectionView.indexPathsForSelectedItems()! let indexPath = indexPaths[0] as NSIndexPath let selectedObject = objects[indexPath.row] let objectClass = ObjectClass() objectClass.selectedObject = selectedObject print("selectedObject value \(selectedObject) and objectClass value \(objectClass.selectedObject)") //outputs values fine } } 的值。

let objectClass = ObjectClass()

var selectedObject: Object!

@IBOutlet weak var title: UIButton!

func setData() {
    selectedObject = objectClass.selectedObject
}

override func viewWillAppear(animated: Bool) {

    setData()
    super.viewWillAppear(true)
    self.tableView.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()
    setData()
    self.splitViewController?.delegate = self
    self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible


    print("Selected Object Details \(selectedObject)")
    //Prints Nil

    title.text = "\(selectedObject.title)"

}

MasterViewController

应用程序现在崩溃,因为使用class属性值为nil而不是托管对象。

类NotesTableViewController:UITableViewController,UISplitViewControllerDelegate {

def decrypt(msg):
    ord = 0
    decoded = ""
    for letter in msg:
        #any number from 97 to 121 will have no rem. They don't warp around.
        #121 & 122 will have rem 1 & 2, so they need +=97 
        ord = (ord(letter) + 2)%123
        if ord < 97:
            ord += 97
        decoded += ord
    return decoded

0 个答案:

没有答案