Проблемы перезагрузки UITextField при перезапуске приложения - PullRequest
0 голосов
/ 11 сентября 2011

Я пытаюсь выполнить простое упражнение, в котором я сохраняю содержимое 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 голосов
/ 12 сентября 2011

Возможно, вам необходимо отменить подписку на уведомление о завершении работы приложения (вы закрываете приложение из окна многозадачности).

Я полагаю, что у делегата приложения есть метод, который вызывается непосредственно перед завершением работы приложения, который вы можете использовать для записи в ваш файл перед закрытием или для запроса дополнительного времени для записи в файл перед завершением или для отмены подписки на ваше уведомление.

- (void)applicationWillTerminate:(UIApplication *)application {
    /*
     Called when the application is about to terminate.
     See also applicationDidEnterBackground:.
     */
}
0 голосов
/ 11 сентября 2011

Если вы закрываете свое приложение с помощью многозадачности, ваше приложение в основном получает сигкилл, который вы не можете легко поймать (возможно, никогда).

Вы сохраняете текст UITextField, который, как я полагаю, сделан пользователем.Вы должны сохранить свои данные на applicationDidEnterBackground.Если ваше приложение работает в фоновом режиме, пользователь не может написать что-либо.в вашем текстовом поле.

...