我有一个自己编写的分段控件 (UISegmenterControl),它会在所选分段发生更改后发送一条消息:
- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex
{
if(_selectedSegmentIndex != selectedSegmentIndex) {
NSInteger segmentIndex = 0;
for (UISegmenterControlSegment *segmentButton in self.segmentButtons) {
if (segmentIndex == selectedSegmentIndex) {
[segmentButton setSelected:YES];
_selectedSegmentIndex = selectedSegmentIndex;
if (self.target != nil) {
if ([self.target respondsToSelector:self.action]) {
objc_msgSend(self.target, self.action, self);
}
}
}
else {
[segmentButton setSelected:NO];
}
segmentIndex++;
}
}
}
objc_msgSend 在我的 View Controller 中触发 (void)didChangeSegmentControl:(UISegmenterControl *) 控件,同时将指针传递给分段控件本身。
问题是,自升级到 XCode 5.1 beta 4 并将我的开发设备升级到 IOS 7.1 beta 4 后,当 didChangeSegmentControl 触发时,我的代码在设备上以 EXC_BAD_ACCESS (code=1) 失败。
似乎在 objc_msgSend 和 didChangeSegmentControl 之间丢失了指向分段控件(即“control”参数)的指针。
这里最让我困惑的是,在我升级之前这并没有发生,并且在分析应用程序时在模拟器或我的设备上仍然没有发生。我想我想问的是:这看起来是我的代码的问题(在以前的 IOS 和/或 XCode 上以某种方式完美运行)还是最新的测试版有问题?
如果您需要有关我的应用的更多信息,请告诉我。
最佳答案
除了使用 objc_msgSend
,您可以使用以下方法吗:
[self.target performSelectorOnMainThread:self.action withObject:self waitUntilDone:YES];
附言感谢您更新评论中的正确对象
关于ios - EXC_BAD_ACCESS(代码=1)但仅在使用 IOS7.1b4 升级到 Xcode 5.1b4 后的设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21353530/