ios7:将iAd.framework添加到项目会导致SIGABRT运行

时间:2014-04-25 08:56:43

标签: ios frameworks iad sigabrt ios7.1

我的项目工作正常。我想在其中加入广告并制作免费版本。我复制了项目,重命名并添加了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属性,虽然声称它们被认为是无法识别的...它变得越来越奇怪,但我已经没有想法向前推进了!有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您的应用崩溃的原因是Apple有一个名为MPViewController的课程,您可以看到here

更改ViewController的类名解决了这个问题。

我认为iAd在内部使用此类来展示广告。编译器决定使用Apples类而不是你的类,因此你得到了does not respond to selector异常,因为Apple的MPViewController没有响应那个选择器。


您可以看到,遵循Cocoa命名约定并使用 3 字母为您的类添加前缀是一个好主意。我现在找不到引用,但我记得他们说(或说)为Apple类保留了2个字母的前缀。