我正在尝试将数据从CollectionViewController
传递到MasterViewController
,SplitViewController
是class
的一部分。我能想到的唯一方法是在单独的文件中创建SplitViewController
以将托管对象保存为类属性值,然后引用prepareForSegue
中的类。 (因为我不能使用SplitViewController
方法,因为我正在MasterViewController
而不是直接class
)。
致命错误:在解包可选值时意外发现nil
我知道这种情况正在发生,因为property
nil
的值为SplitViewController
,因此CollectionViewController
崩溃了。但是当在SplitViewController
方法中输出值时,值不会返回nil,那么为什么类属性在class ObjectClass {
var selectedObject: Object!
}
中的值为nil?
我是Swift的新手,但不是类的引用类型所以我更改了它的属性并从另一个控制器访问它们:/
这就是我的项目设置方式;
我的班级:
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