gpt4 book ai didi

objective-c - Build & Archive/TestFlight 中的不同行为与直接构建到设备

转载 作者:行者123 更新时间:2023-11-29 13:25:10 25 4
gpt4 key购买 nike

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

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

  1. 如果它在 Xcode 中运行良好,我该如何调试失败的地方? (IE,是手势识别器不工作,还是 UIMenuController 等)
  2. 为什么 Archive 副本的行为与 build-to-device 副本不同?

这是相关代码(虽然我 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:) );
}

正如我所说,它在设备和模拟器中的构建效果很好,只是在构建和存档之后没有。

最佳答案

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

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

关于objective-c - Build & Archive/TestFlight 中的不同行为与直接构建到设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13313621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com