私はこの問題にしばらく苦労してきましたが、正確なユースケースを説明するのに十分正確に再現できないようです. 基本的に、私が行っていることは、ネイティブの iOS 6.0 Facebook 共有ダイアログを開くためのリクエストを発行することです (Facebook iOS SDK 3.1.1 を使用):
if ([[SocialManager sharedManager] isNativeFacebookShareDialogAvailable]) {
if (!url) {
url = [NSURL URLWithString:@""];
}
if (!imageUrl) {
imageUrl = [NSURL URLWithString:@""];
}
dispatch_async(backgroundQueue, ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *image = [UIImage imageWithData:imageData];
if (!image) {
image = [[UIImage alloc] init];
}
if ([FBNativeDialogs canPresentShareDialogWithSession:[FBSession activeSession]]) {
dispatch_async(dispatch_get_main_queue(), ^{
[FBNativeDialogs presentShareDialogModallyFrom:sender initialText:initialText images:@[image] urls:@[url] handler:^(FBNativeDialogResult result, NSError *error) {
if (error) {
failBlock([[error userInfo] description]);
} else {
if (result == FBNativeDialogResultSucceeded) {
completionBlock();
} else if (result == FBNativeDialogResultCancelled) {
failBlock(@"User cancelled");
} else if (result == FBNativeDialogResultError) {
failBlock(@"Unknown error");
}
}
}];
});
} else {
LogErr(@"Can't display native share dialog for active session");
}
});
}
が呼び出された直後presentShareDialogModallyFrom:sender
に、次のクラッシュ ログを取得します。
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x1d161490> was mutated while being enumerated.'
*** First throw call stack:
(0x32ede2a3 0x326b097f 0x32eddd85 0x35da094d 0x32edb62f 0x35da07f5 0x35e7e5e5 0x35e0ccd7 0x35e0cb6d 0x372c490f 0x35e0ca61 0x35e160d5 0x372b783b 0x35e160b1 0x372b711f 0x372b699b 0x372b6895 0x372c5215 0x372c53b9 0x36f5fa11 0x36f5f8a4)
libc++abi.dylib: terminate called throwing an exception
または、クラッシュは発生せず、ネイティブの共有ダイアログが正常に表示されます。
UIRemoteViewControllerCreationRequest
スタックは、この時点で呼び出されたスレッドの呼び出しを意味します。2 つの異なるクラッシュの 2 つの例を次に示します。
ご協力いただきありがとうございます