我正在尝试一个简单的练习,当应用程序关闭时,我将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消息。
非常感谢任何帮助。
答案 0 :(得分:0)
如果您通过多任务处理关闭您的应用程序,您的应用程序主要会获得一个您无法轻易捕获的Sigkill(可能永远不会)。
您正在保存由我假设的用户完成的UITextField
文本。您应该将数据保存在applicationDidEnterBackground
上。如果您的应用程序处于后台,则用户无法写入某事。在你的文本区域。
答案 1 :(得分:0)
也许您需要在应用程序终止时取消订阅您的通知(从多任务窗口终止应用程序)。
我认为app委托有一个方法可以在应用程序终止之前调用,在关闭之前可以用来写入文件,或者在完成或取消订阅通知之前请求额外的时间写入文件。
- (void)applicationWillTerminate:(UIApplication *)application {
/*
Called when the application is about to terminate.
See also applicationDidEnterBackground:.
*/
}