2011-09-11 109 views
0

我正在嘗試一個簡單的練習,在應用程序關閉時將UITextField的內容保存到文件中。當應用程序重新啓動時重新加載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消息。

任何幫助將不勝感激。

+1

你應該說明你的問題標題更詳細。 「我究竟做錯了什麼?」可以是任何類型的問題。 – Sebastian

回答

0

如果您通過多任務關閉您的應用程序,您的應用程序通常會得到一個Sigkill,您無法輕鬆捕捉(也許永遠不會)。

您正在保存由我假設的用戶完成的UITextField的文本。您應該將您的數據保存在applicationDidEnterBackground。如果你的應用程序在後臺,用戶不能寫入某物。在您的文本框中。

0

也許您需要在應用程序終止時取消訂閱您的通知(您從多任務窗口終止應用程序)。

我相信應用程序委託有一個方法,在應用程序終止之前被調用,您可以在關閉之前使用它來寫入文件,或者在完成或取消訂閱通知之前請求額外的時間寫入文件。

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

謝謝你的答案。你已經幫了很多忙 – ShedInTheGarden

相關問題