使用UIApplicationDelegate在两个View Controller之间共享数据冲突

时间:2011-02-19 17:09:38

标签: iphone objective-c

我需要将“SampleAppdelegate”中的数据共享到两个视图控制器“ContactViewController.m”和“DrinksViewController.m”。

在SampleAppdelegate中:

@interface SampleAppdelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate , UINavigationBarDelegate>

所以我在相应的视图控制器中包含了以下代码。

在ContactViewController.m中:

- (void)viewDidLoad   
{  
    [super viewDidLoad];  
    SampleAppDelegate *appDelegate = (SampleAppDelegate *)[[UIApplication sharedApplication] delegate];  
    contactDatabaseObject = (ContactDatabaseObject *)[appDelegate.contactDetails objectAtIndex:0];  
    NSLog(@"%@", contactDatabaseObject.contactName);  
    [appDelegate release];  
}

在DrinksViewController.m

(void)viewDidLoad  
{  
    [super viewDidLoad];  
    SampleAppDelegate *appDelegate = (SampleAppDelegate *)[[UIApplication sharedApplication] delegate];  
    drinksDatabaseObject = (DrinksDatabaseObject *)[appDelegate.drinkDetails objectAtIndex:0];  
    NSLog(@"%@", drinksDatabaseObject.drinkName);  
    [appDelegate release];  
}

问题是“共享应用程序委托是两个代码都不能同时工作。(也就是说,如果我在视图控制器中进行上述评论,那么其他代码正常工作正常)。

实际上我正在使用 标签栏 和上面的viewControllers这两个项目。所以加载第一个控制器就好了。但是当我点击第二个视图控制器时,iphone模拟器会因任何警告而终止。 (同时,如果我在任何一个视图控制器中对它进行注释,代码都能正常工作)。请帮我解决上述问题或建议一种方法来完成上述功能。

提前致谢!

2 个答案:

答案 0 :(得分:0)

你应该读......

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html

您不是appDelegate的所有者,无需释放它。

P.S。如果您正在寻求帮助并撰写有关警告的内容,则应始终在此处复制警告,以便更好地了解您的问题。

答案 1 :(得分:0)

你不应该发布appDelegate。