Objective-Cでゲームとか開発してると、ユーザのちょっとしたデータをファイルに保存したりしますよね。
その時のコードでエラー起こしてしまったので、対処法をメモ。
間違いソースがこれです。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *directory = [paths objectAtIndex: 0]; self.filePath = [directory stringByAppendingPathComponent: @"hoge.plist"];self.filePathは保存するファイルのパスを格納するNSStringなクラス変数です。
これだとstringByAppendingPathComponentメソッドは結果をautoreleaseしている(と思う)ので、
ココの処理を抜けた時点でself.filePathはリリースされてしまう(はず)。
別のメソッドでself.filePathを使おうとしても、リリースされたオブジェクトにアクセスしようとしてEXC_BAD_ACCESSになっちゃう。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *directory = [paths objectAtIndex: 0]; self.filePath = [[NSString alloc] initWithString: [directory stringByAppendingPathComponent: @"hoge.plist"]];にしてやれば、self.filePathを自身のdeallocメソッド内でreleaseすることが出来る!
以上でぇぇえぇす。
0 件のコメント:
コメントを投稿