11

を使用して管理対象ドキュメントを開こうとしていますopenWithCompletionHandler:

私が遭遇している問題は、シミュレーターでは正常に動作することですが、iPhone 4でテストすると、完了ハンドラーが終了しません。コードは次のようになります。

[theManagedDocument openWithCompletionHandler:^(BOOL success){
    if(success) [self documentIsReady];
    if(!success) NSLog(@"Couldn't Open Document");
}];

これはシミュレーターで正常に機能し、documentIsReady呼び出しに到達します(または、エラーが発生した場合は「ドキュメントを開けませんでした」)。ただし、iPhone 4では、CompletionHandlerブロックが実行されることはありません。ブロック全体(両方のifステートメントの前後)にブレークポイントを設定しましたが、何も呼び出されていません。コンソールに「ドキュメントを開けませんでした」、への呼び出しはありませんdocumentIsReady

また、iPhoneでアプリを初めて実行したときは、正しく動作するようです。また、これを呼び出し付きのifステートメントにカプセル化していfileExistsAtPath:ます。ifステートメントの内部に入り込み、を呼び出していますopenWithCompletionHandler:、完了ブロックが起動されることはありません

iOS5.1とXcode4.3.2を使用しています。

4

5 に答える 5

8

iCloudを使用してデータを共有するアプリでも同じ問題が発生しました。openWithCompletionHandler:中断されたアプリによってドキュメントが開いたままになっている場合は、待機するだけで完了ハンドラーを呼び出さないことに気付きました。その場合は、アプリがバックグラウンドに移行したときにドキュメントを閉じていることを確認する必要があります。

于 2012-05-25T21:42:15.480 に答える
7

私の場合、iPadの電源を切り、再起動すると、この問題が「修正」されました。幸運を!

于 2012-04-24T21:37:05.127 に答える
2

呼び出しの前に、ManagedDocument!= nilを確認してみてください。これが、ブロックが実行されない理由を考えることができる唯一の理由です。

于 2012-04-16T12:38:44.493 に答える
0

間違っている可能性があるもう1つの理由はsuccess、モデルを変更したが(たとえば、エンティティにプロパティを追加した)、モデルを更新するためにシミュレーター/デバイスからアプリを削除しなかったことです。

于 2013-02-25T16:17:13.147 に答える
0

私にとってこれはopenWithCompletionHandler:、バックグラウンドスレッドを呼び出していたためです。メインスレッドから呼び出されるように変更すると、ハングが修正されました

dispatch_async(dispatch_get_main_queue(), ^{
    ...
    [document openWithCompletionHandler:^(BOOL success) {
        ...
    }];
});        
于 2020-08-14T12:30:40.160 に答える