Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone测试的通用iPhone/iPad应用程序调试编译错误_Iphone_Ios_Ipad_Ios Universal App - Fatal编程技术网

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

我已经编写了一个iPhone和iPad通用应用程序,在Xcode上的iPad模拟器中运行良好,但现在我想测试iPhone的功能。我似乎无法用这个代码运行iPhone模拟器,因为它总是默认为iPad

相反,我尝试在设备上运行,当设备开始运行时,我收到以下错误:

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
  • 执行“产品->清洁”换档指令
  • 重建项目

顺便说一句:Larson先生提到的UIKit框架的弱链接似乎是解决此问题的更简单、更好的方法上述方法更可能是首选方法,但这种方法确实有效。我相信这是一个比弱链接整个框架更好的答案,因为弱链接会带来额外的开销,非常感谢。我确实发现文档在这方面有点缺乏实质内容。@andybee:iPad编程指南中有一个关于创建通用应用程序的好章节:,介绍iPhone操作系统的通用应用程序(PDF)值得一读,另外:在XCode 4.2中,检查这个链接以获得更好的实用程序方法,这是在目标->构建阶段->将二进制与库链接->将框架从“必需”更改为“可选”。如果您使用
NSClassFromString()
动态获取类,则不需要弱链接,除非直接检查是否(UI\u用户界面\u惯用语()==UIUserInterfaceIdiomPad)检查此链接以了解nice实用程序方法以及如何查找对4之前不存在的新API的引用?很好的回答