我的项目工作正常。我想在其中加入广告并制作免费版本。我复制了项目,重命名并添加了iAd.framework。但它已经导致了SIGABRT的运行。
调试没有解释任何内容......它在从根VC的viewDidLoad
方法设置某些VC属性时崩溃了。我不认为这是相关的,但如果您不这么认为,可以提供详细信息。
与iAd链接有什么技巧吗?感谢您提前提供任何帮助!
编辑:日志和添加的一些说明
2014-04-25 16:04:04.249 MyAppTEST [686:60b] - [MPViewController setSoundName:]:无法识别的选择器发送到实例0x16e43a30
2014-04-25 16:04:04.252 MyAppTEST [686:60b] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [MPViewController setSoundName:]:无法识别的选择器已发送例如0x16e43a30'
它抱怨未识别的选择器(确切地说是属性设置器)。但是除了链接iAd.framework之外我没有做任何改变。如果我删除这个框架,它会再次开始正常工作。
经过一些追踪后,我发现,使用iAd框架,[self.storyboard instantiateViewControllerWithIdentifier:@"MPPageContentController"];
会返回一个不正确类型的视图控制器,但不是零!
MPViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MPPageContentController"];
if ([pageContentViewController isKindOfClass:[MPViewController class]]) {
NSLog(@"OK");
}
删除iAd.framework时会通过测试,否则会失败!有什么建议吗?
EDIT2: 这是一个真正的故障!我已将测试更新如下:
MPViewController *pageContentViewController = (MPViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"MPPageContentController"];
if ([pageContentViewController isKindOfClass:[MPViewController class]]) {
NSLog(@"OK");
} else {
NSLog(@"%@", [pageContentViewController description]);
}
并且,在iAd添加到项目的情况下,控制台中会记录以下内容: “ MPViewController:0xa63fd30 ”
我确实在调试模式下的Variables View面板中看到了所需的MPViewController属性,虽然声称它们被认为是无法识别的...它变得越来越奇怪,但我已经没有想法向前推进了!有什么帮助吗?
答案 0 :(得分:1)
您的应用崩溃的原因是Apple有一个名为MPViewController
的课程,您可以看到here。
更改ViewController的类名解决了这个问题。
我认为iAd在内部使用此类来展示广告。编译器决定使用Apples类而不是你的类,因此你得到了does not respond to selector
异常,因为Apple的MPViewController
没有响应那个选择器。
您可以看到,遵循Cocoa命名约定并使用 3 字母为您的类添加前缀是一个好主意。我现在找不到引用,但我记得他们说(或说)为Apple类保留了2个字母的前缀。