【问题标题】:Error when saving data in iPhone SDK 4.2在 iPhone SDK 4.2 中保存数据时出错
【发布时间】:2012-02-12 18:52:12
【问题描述】:

这是我试图保存一些 UITextView 文本的一些代码。当我运行它并更改文本并单击保存按钮时,它可以工作,但是当我从多任务栏中取出它并重新打开它时,它会崩溃。怎么了?

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

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

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

}

(保存文件.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];

任何帮助表示赞赏。

【问题讨论】:

  • 因什么而崩溃?发布崩溃日志。
  • 感谢您的回复,它使应用程序崩溃。这是来自控制台的崩溃日志:sharedlibrary apply-load-rules all 当前语言:auto;目前是objective-c (gdb)

标签: objective-c iphone cocoa-touch ios5 save


【解决方案1】:

您发布的代码中唯一可能导致崩溃的地方是以下行:

notesTextView.text = [values objectAtIndex:0];

如果数组为空(其中有零个项目),则会因数组越界错误而崩溃。我建议你把:

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

然后看看你的崩溃是否会消失。

在不相关的注释中,您实际上可以通过仅使用 [NSArray arrayWithContentsOfFile:...] 取出“if (fileExists)”部分来大大简化代码,如果文件不存在则安全返回 nil .

【讨论】:

  • 非常感谢,但由于某种原因它仍然崩溃:-(。我很困惑,当我从多任务栏中删除文本并重新打开它时,文本正在被保存和显示,但是由于某种原因它仍然崩溃,令人困惑嘿!
  • 听起来它与您粘贴到问题中的代码无关。这是在模拟器上还是在设备上?是否有任何内容记录到控制台?您是否尝试过对异常和僵尸启用中断?
  • 您的意思是通过进行仪器会话来“启用异常和僵尸中断”吗?它在模拟器中,你想让我在设备上试试吗,顺便非常感谢你的帮助:-)
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2010-11-20
相关资源
最近更新 更多