【发布时间】:2015-09-01 22:53:25
【问题描述】:
下面是我项目的故事板截图:
如您所见,我有一个 UIViewController 和一个 UITableView 嵌入在 UINavigationController 中。当用户将一个项目添加到UITableView 时,会创建一个我命名为Project 的新领域Object 模型(我正在使用RealmSwift),它们会被带到UITabBarController 中的第一个项目。我想知道是否可以将UITabBarController 及其所有子视图控制器与创建的Project 相关联。
这是创建Object 的代码(工作正常):
func add(withName projectName: String) {
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {
autoreleasepool {
let realm = try! Realm()
let newProject = Project(value: ["name": projectName, "date": NSDate()])
realm.write({ () -> Void in
realm.add(newProject)
})
}
}
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
selectedProject = array[indexPath.row]
print(selectedProject)
self.performSegueWithIdentifier("showTab", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showTab" {
let dvc = segue.destinationViewController as! TabBarViewController
dvc.project = selectedProject
}
}
如您所见,我将新的Project 传递给UITabBarController。
这是我在UITabBarController中的代码:
import UIKit
import RealmSwift
class MasterTabViewController: UITabBarController {
var project: Project?
override func viewDidLoad() {
super.viewDidLoad()
configureNavigationBar()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
// MARK: - UI Styling
private extension MasterTabViewController {
func configureNavigationBar() {
navigationItem.title = project?.name
}
}
这会设置从UITabBarController 继承的所有UIViewControllers 的标题。
我有没有办法让 Project 对象可用于从 UITabBarController 继承的所有视图控制器?我还没有找到太多这方面的信息。我发现的一个建议是将Object 存储在NSUserDefaults 中,但在我看来必须有更好的方法。
编辑:我忘了补充一点,我可以想办法使用 NSManagedObjectContext 对 Core Data 执行此操作,但我在 Realm 中看到等效项时遇到了一些麻烦。
【问题讨论】:
标签: ios swift swift2 realm ios9