最近、テーブル セル内の UILabel を長押しして「コピー」メニューを表示し、ユーザーがテキストをペーストボードにコピーできるようにする機能をアプリに追加しました。シミュレーターでも、デバイスに直接ビルドする場合でも、うまく機能します。ただし、(TestFlight にプッシュできるように) ビルドしてアーカイブすると、機能が動作しません。
このスタック オーバーフローの質問で解決策を試みましたが、うまくいきませんでした (iOS 5.0 以降用にビルドしているため、関連性がないようです)。ビルド設定で最適化レベルを設定しています。None [-O0]
- Xcode で正常に動作する場合、何が失敗しているのかをデバッグするにはどうすればよいですか? (IE、Gesture Recognizer が機能していない、または UIMenuController など)
- アーカイブ コピーの動作がビルド ツー デバイス コピーと異なるのはなぜですか?
関連するコードは次のとおりです (ただし、問題はこのコードではなく、Xcode の設定にあると 90% 確信しています)。
Gesture Recognizer の追加:
UIGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPressForCopy:)];
[_postLabel addGestureRecognizer:longPress];
[self addSubview:_postLabel];
ハンドル長押し
- (void)handleLongPressForCopy:(UILongPressGestureRecognizer *)recognizer {
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
NSAssert([self becomeFirstResponder], @"Sorry, UIMenuController will not work with %@ since it cannot become first responder", self);
UIMenuController *theMenu = [UIMenuController sharedMenuController];
CGRect displayRect = CGRectMake(_postLabel.frame.origin.x, _postLabel.frame.origin.y, 10, 0);
[theMenu setTargetRect:displayRect inView:self];
[theMenu setMenuVisible:YES animated:YES];
break;
default:
break;
}
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
return (action == @selector(copy:) );
}
私が言ったように、ビルドとアーカイブの後ではなく、デバイスとシミュレーターでのビルドがうまく機能します。