应用程序重新启动时重新加载UITextField时出现问题

时间:2011-09-11 15:56:01

标签: iphone xcode multitasking

我正在尝试一个简单的练习,当应用程序关闭时,我将UITextField的内容保存到文件中。

我的头文件如下:

#define kFileName @"file.plist"

@interface applicationLaunchViewController : UIViewController {

    UITextField *text1;

}

@property (nonatomic, retain) IBOutlet UITextField *text1;

-(void)applicationSaveFile:(NSNotification *)notification;
-(NSString *)dataFilePath;

我的实施档案:

@implementation applicationLaunchViewController

@synthesize text1;

-(void)applicationSaveFile:(NSNotification *)notification {

    NSMutableArray *array = [[NSMutableArray alloc] init];

    [array addObject:text1.text];
    [array writeToFile:[self dataFilePath] atomically:YES];
    [array release];

}

-(NSString *)dataFilePath {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDictionary = [paths objectAtIndex:0];
    return [documentsDictionary stringByAppendingPathComponent:kFileName];

}



- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{

    NSString *filePath = [self dataFilePath];

    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
        self.text1.text = [array objectAtIndex:0];
        [array release];
    }

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationSaveFile:) name:UIApplicationDidEnterBackgroundNotification object:nil];


    [super viewDidLoad];
} 

这段代码中有什么东西我不见了吗?当我启动应用程序它运行正常,没有错误。我关闭应用程序,仍然可以,但是当我通过多任务关闭应用程序并重新打开时,我收到SIGKILL消息。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您通过多任务处理关闭您的应用程序,您的应用程序主要会获得一个您无法轻易捕获的Sigkill(可能永远不会)。

您正在保存由我假设的用户完成的UITextField文本。您应该将数据保存在applicationDidEnterBackground上。如果您的应用程序处于后台,则用户无法写入某事。在你的文本区域。

答案 1 :(得分:0)

也许您需要在应用程序终止时取消订阅您的通知(从多任务窗口终止应用程序)。

我认为app委托有一个方法可以在应用程序终止之前调用,在关闭之前可以用来写入文件,或者在完成或取消订阅通知之前请求额外的时间写入文件。

- (void)applicationWillTerminate:(UIApplication *)application {
    /*
     Called when the application is about to terminate.
     See also applicationDidEnterBackground:.
     */
}