Build& amp;中的不同行为Archive / TestFlight比直接建立设备

时间:2012-11-09 18:10:01

标签: objective-c ios xcode ios-simulator testflight

我最近在我的应用程序中添加了长按表格单元格内的UILabel以显示“复制”菜单的功能,以便用户可以将文本复制到粘贴板。它在模拟器和我直接构建到设备时都很好用。但是,当我建立&存档(所以我可以推送到TestFlight)该功能不起作用。

我尝试了this Stack Overflow question中的解决方案,但它没有用(因为我正在为iOS 5.0+构建,所以似乎并不相关)。我在构建设置中将优化级别设置为None [-O0]

  1. 如果在Xcode中正常工作,如何调试失败的内容? (IE,是Gesture Recognizer无法正常工作,或UIMenuController等。)
  2. 为什么Archive副本的行为与构建到设备副本的行为不同?
  3. 这是相关的代码(虽然我90%确定问题不是这个代码,而是一些Xcode设置):

    添加手势识别器:

    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:) );
    }
    

    正如我所说的那样,它对设备和模拟器的构建非常有效,而不是在Build&档案

1 个答案:

答案 0 :(得分:1)

在发布版本中未调用NSAssert方法,因为已为发布版本启用了-DNS_BLOCK_ASSERTIONS标记。

在上面的代码中,我通过将[self becomeFirstResponder]移动到它自己的行,将返回值赋给BOOL,然后在BOOL上调用NSAssert来解决了这个问题。