2

我有一个教程应用程序,演示如何使用UINavigationController. 大多数应用程序都可以正常工作。

当我模拟内存警告时,它会丢失一些数据。我有两个UIViewController在一个UINavigationController。有一个UIButtonon firstUIViewController的视图,当用户触摸它时UIButton, first 会创建 secondUIViewController并推送导航堆栈UIViewController。我通过将数据从第二个传递UIViewController到第一个。UIViewControllerNSNotificationCenter

使用这种方法,应用程序可以正常工作,但是如果我在 secondUIViewController的视图可见时模拟内存警告,则什么也不会传回。那么在那种情况下,我该如何生存。

4

1 回答 1

0

当触发内存警告时,应用程序会尝试删除所有不再需要的对象。这可能会从第一个 UIViewController 中删除侦听器。

NSNotificationCenter 的问题在于没有一种简单的方法来检查侦听器是否处于活动状态。

我不知道这种情况是否适合使用 NSNotification 设置。很容易失去对将哪些消息发送到哪个视图控制器的控制。

也许这个设置更容易(并且可能记忆更安全)。它保留对第一个 UIViewController 对象的引用

//
//  SecondViewController.h
//  test
//
//

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface SecondViewController : UIViewController

@property(nonatomic, retain) ViewController *parentViewController;

@end

和 .m 文件

//
//  SecondViewController.m
//  test
//
//

#import "SecondViewController.h"

@interface SecondViewController ()
    -(IBAction)buttonPressed:(id)sender;
@end

@implementation SecondViewController

@synthesize parentViewController;

-(IBAction)buttonPressed:(id)sender {
    parentViewController.yourObject = @"your value";
}

-(void)dealloc {
    [parentViewController release];
    [super dealloc];
}

推动第二个视图控制器时,请执行以下操作:

SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    vc.parentViewController = self;
    [self.navigationController pushViewController:vc animated:YES];
[vc release];
于 2012-06-18T13:21:42.537 回答