Ошибка при сохранении данных в iPhone SDK 4.2 - PullRequest
1 голос
/ 18 января 2012

Вот код, который я пытаюсь сделать, чтобы сохранить текст UITextView. Когда я запускаю его, изменяю текст и нажимаю кнопку сохранения, он работает, но когда я беру его с панели многозадачности и открываю его снова, происходит сбой. Что не так?

- (NSString *)saveFilePath
{
    NSLog(@"saveFilePath");

    NSArray *path =
    NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    return [[path objectAtIndex:0] stringByAppendingPathComponent:@"savefile.plist"];

}

(файл сохранения file.plist находится в моем проекте) просмотр загрузил

- (void)viewDidLoad
{
NSString *myPath = [self saveFilePath];

    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];

    if (fileExists)
    {
        NSLog(@"file Exsists");

        NSArray *values = [[NSArray alloc] initWithContentsOfFile:myPath];
        notesTextView.text = [values objectAtIndex:0];
    }

}

Кнопка сохранения данных:

NSArray *values = [[NSArray alloc] initWithObjects:notesTextView.text, nil];
    [values writeToFile:[self saveFilePath] atomically:YES];

Любая помощь приветствуется.

1 Ответ

1 голос
/ 18 января 2012

Единственное место в опубликованном вами коде, которое может вызвать сбой, - это строка:

notesTextView.text = [values objectAtIndex:0];

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

if ([values count] > 0)
{
    notesTextView.text = [values objectAtIndex:0];
}

И посмотри, исчезнет ли твоя авария.

В несвязанной заметке вы можете немного упростить свой код, убрав часть if (fileExists), просто используя [NSArray arrayWithContentsOfFile: ...], который безопасно возвращает nil, если файл не существует .

...