iPhone测试的通用iPhone/iPad应用程序调试编译错误
我已经编写了一个iPhone和iPad通用应用程序,在Xcode上的iPad模拟器中运行良好,但现在我想测试iPhone的功能。我似乎无法用这个代码运行iPhone模拟器,因为它总是默认为iPad 相反,我尝试在设备上运行,当设备开始运行时,我收到以下错误:iPhone测试的通用iPhone/iPad应用程序调试编译错误,iphone,ios,ipad,ios-universal-app,Iphone,Ios,Ipad,Ios Universal App,我已经编写了一个iPhone和iPad通用应用程序,在Xcode上的iPad模拟器中运行良好,但现在我想测试iPhone的功能。我似乎无法用这个代码运行iPhone模拟器,因为它总是默认为iPad 相反,我尝试在设备上运行,当设备开始运行时,我收到以下错误: dyld: Symbol not found: _OBJC_CLASS_$_UISplitViewController Referenced from: /var/mobile/Applications/9770ACFA-0B88-41
dyld: Symbol not found: _OBJC_CLASS_$_UISplitViewController
Referenced from: /var/mobile/Applications/9770ACFA-0B88-41D4-AF56-77B66B324640/Test.app/Test
Expected in: /System/Library/Frameworks/UIKit.framework/UIKit in /var/mobile/Applications/9770ACFA-0B88-41D4-AF56-77B66B324640/Test.app/TEST
由于该应用程序是以编程方式构建的,而不是使用XIB,因此我使用main.m方法中的以下行拆分了2个设备逻辑:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_Pad");
}
else
{
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_Phone");
}
从那时起,他们使用不同的AppDelegate,我检查了我的标题,以确保UISplitView从未使用过,也从未通过电话逻辑导入过
如何避免此错误,以及是否有更好的方法在此编程创建的应用程序中拆分通用逻辑路径?正在触发此错误,因为您没有弱链接UIKit框架。iPhone OS 3.2中的UIKit框架添加了UISplitViewController,如果您像正常一样将其链接,您的应用程序将假定这些符号存在于3.0中,而它们不存在 要弱链接框架,请在Xcode中找到应用程序目标,检查它,然后转到“常规”选项卡。在该选项卡的底部应该是一个框架列表,其中有一列表示类型。将UIKit的类型从必需更改为弱,然后重新生成应用程序。这应该会处理运行时错误 您的条件逻辑是合理的,但我倾向于共享一个应用程序委托,并进一步进行特定于接口的布局
(更新日期:2011年12月21日)从iOS 4.2开始,您应该不再需要使用弱链接框架来防止此类错误。正如,如果您使用iOS 4.2或更高版本构建,并将目标锁定在iPhone OS 3.1+,那么单个类现在是弱链接的,如果当前运行的操作系统版本上不存在该类,则其
+class
方法应该返回nil
。我遇到了一个非常类似的错误,这让我发疯了!:-)搜索了几个小时却找不出答案
正如您所说,在iPad模拟器中运行时一切正常,但在使用iPhone OS 3.1.2在iPhone上测试应用程序时,它甚至不会启动,而是会出现以下错误消息:
mi_cmd_stack_list_帧堆栈中没有足够的帧
通过检查几乎每一行代码,我意识到分配3.2类,如UIPopoverController或UISplitViewController(已经在分叉的iPad特定代码中)是导致问题的原因
因此,与此相反,即:
infoPopover=[[UIPopoverController alloc]initWithContentViewController:infoNavController]
我会写
infoPopover=[[NSClassFromString(@“UIPopoverController”)alloc]initWithContentViewController:infoNavController]
这就解决了我的问题!(如果错误消息不告诉您可能在何处发现错误,调试可能会非常困难……Xcode 8.3、iPad 2(非视网膜)、Swift 3代码
对我有帮助的是:
- 重新启动Xcode
- 执行“产品->清洁”换档指令
- 重建项目
NSClassFromString()
动态获取类,则不需要弱链接,除非直接检查是否(UI\u用户界面\u惯用语()==UIUserInterfaceIdiomPad)检查此链接以了解nice实用程序方法以及如何查找对4之前不存在的新API的引用?很好的回答