EXC_错误访问(代码=1),但仅在设备上,因为升级到带有IOS7.1b4的Xcode 5.1b4
我有一个我自己编写的分段控件(UISegmenterControl),一旦选定的分段发生更改,它就会发送一条消息:EXC_错误访问(代码=1),但仅在设备上,因为升级到带有IOS7.1b4的Xcode 5.1b4,ios,xcode,Ios,Xcode,我有一个我自己编写的分段控件(UISegmenterControl),一旦选定的分段发生更改,它就会发送一条消息: - (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex { if(_selectedSegmentIndex != selectedSegmentIndex) { NSInteger segmentIndex = 0; for (UISegmenterControlSe
- (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在my view控制器中触发(void)didChangeSegmentControl:(UISegmenterControl*)控件,同时将指针传递给分段控件本身
问题是,由于升级到XCode 5.1 beta 4和我的开发设备到IOS 7.1 beta 4,当didChangeSegmentControl启动时,我的代码在具有EXC_BAD_访问权限(代码=1)的设备上掉落
objc_msgSend和didChangeSegmentControl之间似乎丢失了指向分段控件(即“control”参数)的指针
最让我困惑的是,在我升级之前,这种情况是不会发生的,而且在分析应用程序时,无论是在模拟器上还是在我的设备上都不会发生。我想我要问的是:这看起来是我的代码的问题(在以前的IOS和/或Xcode上运行得非常好)还是最新的beta版的问题
如果您需要有关我的应用程序的更多信息,请告诉我。您是否可以使用以下选项,而不是使用
objc\u msgSend
:
[self.target performSelectorOnMainThread:self.action with object:self waitUntilDone:YES]代码>
另外,感谢您更新评论中的正确对象错误发生在哪一行?如果没有完整的、符号化的崩溃日志,将很难提供帮助。而且,正如你提到的,这两个软件版本都是测试版。谢谢你的快速回复。错误发生在…-(void)didChangeSegmentControl:(UISegmenterControl*)控件在我的视图控制器中,其中“control”显示为Nil。是否可以使用[self-performSelectorOnMainThread:self.action With Object:self.target waitUntilDone:YES]代码>相反(我希望对象正确-请检查)?您是否绝对确定objc\u msgSend
中的参数非零?嗯,我必须对它进行一些调整-我假设您的意思是键入[self.target performSelectorOnMainThread:self.action with object:self waitUntilDone:YES];但是,是的,已经完成了。非常感谢-现在开始阅读为什么这比我的方法更有效:)不要用字母UI
开始你自己的班级名称。非常感谢。是的,我看到objc_msgSend是一个相当低级的函数,它不像performselectornmainthread方法那样为您管理线程。将来将避免使用前者。