2013-04-26 60 views
1

Hy全部, 我真的被困在我的iOS应用程序的数据传递。iOS传递数据,单身,外部或通过协议?

首先我用TabBarController和另一个两个ViewController里面有一个类。 这是一个包含每日和每周日历视图的容器视图。

我想将下载的数据存储在带有日期的NSDictionary中,因此日历不必随时重新加载数据(仅当用户强制刷新时)。

因此,我应该将这些数据存储在Container视图中的“extern NSDictionary”中吗? 或者我应该创建一个SingletonClass并将字典存储在那里? 但是容器视图发布后SingletonClass会被释放吗?

或者我应该将NSDictionary存储在容器视图中,然后通过协议使用方法来访问Dic?但是如何?

我查了很多教程和例子,但我仍然不知道如何正确地做到这一点。 谢谢

+0

因此,您有一个标签栏控制器,其中每个标签栏控件都带有一个视图控制器。一个VC每天显示,另一个显示每周日历,问题是如何在这两个控制器之间共享数据? – user523234 2013-04-26 11:11:18

+0

是的,我想要一个类(或者我扩展了TabBarContrCalls),可以为数据返回一些数据(如果它尚未下载)。 我是否需要使用单身?但是,在所有包含的课程发布之后他们会发布吗 – Laszlo 2013-04-27 18:11:48

回答

2

你可以将它存储在tabBarController中并在tabBar viewController实例内部访问它,但我认为你可能最好将它存储在NSUserDefaults中。这样你可以轻松地从它中获取它无需抓取TabBar实例即可在应用程序中的任何位置。

我个人建议创建一个实现你像NSUserDefaults的这样(虽然你可以只写和直接读它,如果你想)一个Singleton类:

//DefaultsSingleton.h 
@interface DefaultsSingleton : NSObject 
{ 
} 

+(DefaultsSingleton*) sharedDefaultsSingleton; 
@property(atomic,assign)NSDictionary *yourDictionary; 

//DefaultsSingleton.m 
@implementation DefaultsSingleton 

SYNTHESIZE_SINGLETON_FOR_CLASS(DefaultsSingleton) 

-(NSDictionary *) yourDictionary 
{ 
    return[ [NSUserDefaults standardUserDefaults] dictionaryForKey:@"your_dictionary"]; 
} 

-(void) setYourDictionary:(NSDictionary *)yourDictionary 
{ 
    [[NSUserDefaults standardUserDefaults] setValuesForKeysWithDictionary:yourDictionary]; 
} 

然后,只需将这个单例文件导入到您要访问的任何位置,然后您可以使用它的值初始化新词典并创建可变副本,然后无论您希望如何覆盖保存的值。哦,你还应该导入马特加拉格尔的真棒SynthesizeSingleton类。 http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

+0

Hy there, 我已经使用NSUserDefaults的单例类来存储用户名,电子邮件地址和以前的数据,如上次使用的ViewController,用户类型和类似的东西。 但存储我想做一个动态和有组织的字典什么是充满事件,(天是钥匙,然后对象是数组,并在数据更多的字典里面)。 那么,如果我将这个Dics及其方法存储在TabBarControllerView中,然后使用委托方法访问它,如果处理它是最好的方法呢? 顺便说一句,感谢您的回复 – Laszlo 2013-05-07 09:12:37

+0

是啊,这听起来像它会工作,只要你愿意重新加载你的字典,每次应用程序重新启动。这是你想要做什么? – 2013-05-07 21:17:10