2011-06-03 44 views
1

在Xcode 4中使用“Tab Bar”模板,每个ViewController都是自动创建的,所以我没有机会在创建ViewController时设置任何属性。我希望每个ViewController都可以访问一个对象(FMDB的FMDatabase的一个实例)。你如何在iOS上的ViewControllers之间传递一个对象?

有许多有关这个已经在计算器上的问题,但也有一些假设你正在创建VC的手,和其他人建议使用的AppDelegate作为调解人:

MyAppDelegateClass *appDelegate = [[UIApplication sharedApplicaton] delegate]; 
myLocalProperty = appDelegate.someDataModelProperty; 

上面似乎而是对我来说“哈克”。有没有更好的方法来访问多个ViewController中的单个对象?

+0

即使使用Tab Bar模板,您也将拥有视图控制器的自定义子类。他们很可能会'FirstViewController'和'SecondViewController'。一探究竟。您可以在那里进行更改。 – 2011-06-03 13:37:22

+0

我也想回答这个问题。好的时机! – Legolas 2011-06-03 13:39:57

+0

我不认为这是“hacky”,如果它不需要根据视图进行更改,则比将其传递给每个子视图的控制器更容易。最好使它只读,以便随后的对象可以对其进行修改,但不能偷偷替换它,如果这对您正在处理的数据有效。 – 2011-06-03 22:30:18

回答

3

FMDB数据库最可能的实现方式是将其作为Singleton实现并通过应用程序访问它。有没有理由不这样做?

此链接可以帮助你这样做: How do I make FMDB's database a singleton

+0

顺便说一句 - 你链接的例子可能遭受2线程调用'+ sharedSQLiteDB'的竞争条件“同时”。你可以在'+(void)load'中创建你的单例实例,或者在'+ sharedSQLiteDB'中添加一个锁定代码。 – nielsbot 2011-06-03 22:27:38

+0

我并不喜欢在我的控制器中喷洒SQL查询,但是基于这个我创建了一个单例这个类以更加可可的方式管理我的数据库交互,谢谢! – Drarok 2011-06-03 23:43:43

0

要扩大KKK4SO的答案,你可以实现数据库作为一个单身。然后,让所有的UIViewController都是一个子类UIViewController,它包含访问和修改数据库单例的方法。

0

MyAppDelegateClass * appDelegate = [[UIApplication sharedApplicaton] delegate]; myLocalProperty = appDelegate.someDataModelProperty;

此代码中存在拼写错误'sharedApplicaton'拼写错误,它应该是'sharedApplication'。

耻辱我复制和粘贴!无论如何,这将适用于在ViewControllers之间传递数据的快速和肮脏的方式。

相关问题