我有一个教程应用程序,演示如何使用UINavigationController
。大多数应用程序工作正常。
当我模拟内存警告时,它会丢失一些数据。我在UIViewController
中有两个UINavigationController
。第一个UIButton
视图中有一个UIViewController
,当用户触摸UIButton
时,会创建第二个UIViewController
并按首先UIViewController
推送导航堆栈。我通过UIViewController
将数据从第二个UIViewController
传递到第一个NSNotificationCenter
。
使用这种方法,应用程序运行正常,但如果我在第二个UIViewController
的视图可见时模拟内存警告,则不会传回任何内容。那么在那种情况下我怎么能活下来呢。
答案 0 :(得分: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];