iOS 3.0上的Xcode 4.2,Three20未找到符号:_OBJC_CLASS _ $ _ UISplitViewController

时间:2011-12-02 16:44:18

标签: xcode three20 uisplitviewcontroller

我正在使用Xcode 4.2和Three20创建可在所有iOS上运行的应用程序。

当我在拥有iOS 3.0的iPhone 3G上运行应用程序时, 我在调试控制台中看到以下消息发生崩溃:

dyld: Symbol not found: _OBJC_CLASS_$_UIPopoverController
  Referenced from: /var/mobile/Applications/7AB01877-55F2-4A5F-A835-FF7849D6E285/Xcode4M.app/Xcode4M
  Expected in: /System/Library/Frameworks/UIKit.framework/UIKit

我跟着这个this SO并修复了崩溃。 现在我收到另一个崩溃消息:

dyld: Symbol not found: _OBJC_CLASS_$_UISplitViewController
  Referenced from: /var/mobile/Applications/7AB01877-55F2-4A5F-A835-FF7849D6E285/Xcode4M.app/Xcode4M
  Expected in: /System/Library/Frameworks/UIKit.framework/UIKit

我尝试使用相同的方法修复此崩溃,但未成功。

你知道如何解决这个问题吗?

修改 :(添加有问题的代码)

文件: TTSplitViewController

@interface TTSplitViewController : UISplitViewController 
<UISplitViewControllerDelegate, TTNavigatorRootContainer> {
@private
  TTNavigator* _leftNavigator;
  TTNavigator* _rightNavigator;
  UIBarButtonItem*      _splitViewButton;
  id  _popoverSplitController;
}

2 个答案:

答案 0 :(得分:1)

是肯定的。您可以在https://github.com/facebook/three20/pull/695/files的拉取请求中查看代码。除了TTSplitViewController之外,它还解决了所有3.1问题。

它使用three20的特殊功能来创建UIPopViewController

_popoverController =  [[TTUIPopoverControllerClass() alloc] init];
  if (_popoverController != nil) {
    [_popoverController setContentViewController:controller];
    [_popoverController setDelegate:self];
  }

你仍然需要注释掉TTSplitViewController,但这是唯一一个与iOS 3.1有问题的类。 (参见拉动请求中的评论)

答案 1 :(得分:0)

我取消选中目标会员资格中的 TTSplitViewController.h TTSplitViewController.m
并评论该行

//#import "Three20UI/TTSplitViewController.h"  
Three20UI.h

中的

enter image description here

并从目标会员资格中取消选中 UISplitViewController + TTNavigator.h UISplitViewController + TTNavigator.m

并评论该行

//#import "Three20UICommon/UISplitViewController+TTNavigator.h"  

Three20UICommon + Additions.h

enter image description here

我工作,但我更喜欢做this SO这样的事情,所以我可以稍后使用这些类。如果有人知道怎么做,我会很高兴。