2

UIDocument を使用してファイルをロードしています。ファイルを破損して、アプリの動作と動作を確認しました。EXC_BAD_ACCESS でクラッシュするため、このようなシナリオをどのように処理すればよいか疑問に思っていました。ファイルが破損しないことを願うだけですか? UIDocument 以前は、NSEXCEPTION に @try と @catch を使用していましたが、これは EXC_BAD_ACCESS では機能しません。これは、NSZOMBIE を使用するケースですか? 私が他の投稿を理解している限り、NSZombie はデバッグ目的でのみ使用されており、実際には常に依存すべきものではありません。これは、データが破損した場合に EXC_BAD_ACCESS をスローするコード行です。

 -(BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError {

if (!_books) {
        _books = [[NSMutableArray alloc] init];
    }

        self.books = [NSKeyedUnarchiver unarchiveObjectWithData:contents]; // THIS WILL CRASH IF CONTENTS GOT CORRUPTED

        if ([_delegate respondsToSelector:@selector(libraryDocumentUpdated:)]) {
            [_delegate libraryDocumentUpdated:self];
        }

        return YES;
    }

提案をありがとう。

4

2 に答える 2

1

EXEC_BAD_ACCESS はキャッチする例外ではなく、無効なメモリ アドレスにアクセスしているため、クラッシュが発生したことを示しています。NSZombies は、割り当てを解除する必要のあるすべてのオブジェクトを「生きている」状態に保つ方法にすぎません (したがって、それらが占有しているメモリを解放しません。これは明らかにリリース ビルドで必要なものではありません)。メッセージング。EXEC_BAD_ACCESS を取得している理由を理解する必要があります。書籍は保有財産ですか?

于 2011-11-12T19:21:42.003 に答える