我自己编写了一个分段控件(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在我的视图控制器中触发offChangeSegmentControl:(UISegmenterControl *)控件,同时将指针传递给分段控件本身。
问题是,自从升级到XCode 5.1 beta 4和我的开发设备升级到IOS 7.1 beta 4后,当didChangeSegmentControl触发时,我的代码在EXC_BAD_ACCESS(代码= 1)的设备上失效。
似乎在objc_msgSend和didChangeSegmentControl之间丢失了指向分段控件的指针(即'control'参数)。
最令我困惑的是,直到我升级后才发生这种情况,但在分析应用程序时,模拟器或设备上仍然没有发生这种情况。我想我的问题是:这看起来是我的代码的问题(在以前的IOS和/或XCode上以某种方式完全正常运行)或者这可能是最新测试版的问题?
如果您需要有关我的应用的更多信息,请与我们联系。
答案 0 :(得分:2)
不是使用objc_msgSend
,而是使用以下内容:
[self.target performSelectorOnMainThread:self.action withObject:self waitUntilDone:YES];
P.S。感谢您对评论中正确对象的更新