如何将现成的项目(使用应用程序委托创建和启动但没有 xib、nib)添加到另一个项目

Posted

技术标签:

【中文标题】如何将现成的项目(使用应用程序委托创建和启动但没有 xib、nib)添加到另一个项目【英文标题】:how to add a ready-to-use project ( created and started with application delegate but without xib,nib) to another project 【发布时间】:2012-05-15 12:46:29 【问题描述】:

我有一个现成的项目(使用应用程序委托创建和启动,但没有 xib、nib)。现在我想从另一个项目调用并启动它。 但是我不能使用 initwithnib,如何从另一个项目中包含并启动这个现成的项目? 更具体地说,如何将只有自己的 appDelegate 和 Mainwindow.xib 文件的 Apple 示例代码“TableViewUpdates (TVAnimationsGestures.xcodeproject)”添加和集成到我自己的应用程序中?谢谢! 或者您可以将 xib 文件添加到 Apple 的示例代码“TableViewUpdates (TVAnimationsGestures.xcodeproject)”中,以便我可以在我的另一个项目中使用 initWithNib 来调用和运行示例代码。谢谢!

【问题讨论】:

我认为这不是应该的方式。您应该将您的类复制到新项目并适当地连接它们。 感谢 Danich 的及时回复。我听从了您的建议,成功地将“TableViewUpdates”示例项目添加到我现有的项目中。但是当我想将 MoviePlayer 示例项目集成到我的另一个基于 Three20 的 TTNavigatorDemo 的项目中时,如果不使用 initNib 就很难调用它。 因为一个是 Three20 项目,而另一个要集成的不是基于 Three20。感谢您的进一步建议。 因为 Apple MoviePlayer 示例项目是使用 App 委托而不是 Xib 构建的。许多 Apple 示例代码似乎都是以这种方式构建的。为了解决这个问题,我使用 Xib 创建了一个基于空视图的 App。然后将 Apple MoviePlayer 示例代码集成到其中。 (主要是将其 App 委托文件中的代码迁移到我的基于 Xib 的项目中。)然后这个 Xib MoviePlayer 项目工作了。但是如果我用initNib将它集成到我的其他项目中,它就会出现问题。如果Apple MoviePlayer示例项目提供了它的Xib,那么我认为调用应该没有问题。谢谢! 对不起,我的意思是,Apple MoviePlayer 示例项目只有 Mainwindow Xib,没有 MoviePlayer.Xib,这就是为什么我不能使用 initNib 将其调用到我的项目中。 【参考方案1】:

我在 Xcode 4.3.2 上工作。

    创建单视图单视图应用。 在 MoviePlayer 示例中展开所有文件夹。选择除 info.plist、main、Frameworks、Products 文件夹、readme.txt、MoviePlayer.project 之外的所有文件。 复制它们到新的空项目。不要忘记选中“添加到目标”。 在目标的构建阶段选项卡中添加了 MediaPlayer.framework(在链接二进制与库中) 将所有对象从 MainWindow.xib 复制到您自己的 viewController 的 xib。

比在 ViewController.h 中:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITabBarController *tabBarConroller;

@end

将您的 tabBarController 从 ViewController.xib 连接到属性。

比在 ViewController.m 中:

@implementation ViewController
@synthesize tabBarConroller;

- (void)viewDidLoad

    [super viewDidLoad];
    [self.view addSubview:tabBarConroller.view];


- (void)viewDidUnload

    [self setTabBarConroller:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.

...other appdelegateMethods ...
@end

7。检查 viewController.xib 中的所有对象是否都有必要的插座。 6. 编辑 > 重构 > 转换为 ARC。 (接下来,好的……)

完成了。

【讨论】:

太好了!非常感谢您的详细描述!它有效。但仍有 2 个地方需要完善。一个是,因为我从导航应用程序调用它。因此,当我单击“返回”导航栏时,视频仍在继续运行(我将原始视频更改为带有音频声音的视频)。在单击“返回”离开演示之前,我必须进一步停止视频导航栏。另一个问题是,视频屏幕上下有2个灰条,即使我把它全屏了。下灰条覆盖了播放栏的一半。所以只出现上半部分播放栏 张贴图片。例如,您可以通过以下方法停止视频:viewWillDisappear: 我尝试在 MyMovieViewController.m、MyLocalMovieViewController.m 和 MoviePlayerNibViewController.m 的 viewWillDisappear 中分别添加以下 3 行代码,但是当单击“返回”项栏时,它们都没有停止播放视频并且窗口被导航回来:[[self moviePlayerController] stop];诠释 i = 111222; NSLog(@"%d", i);甚至没有一个 NSLog 显示变体 i。谢谢! 如果你把你的 ViewController 放在 NavigationController 中,那么你应该把 viewWillDisappear: 方法放在那个 ViewController 中。它仅在 NavigationController 堆栈中的控制器上调用。 感谢Danich的及时回复。我之前已经放过了。实际上MoviePlayerNibViewController.m就是你上面提到的ViewController。它是你上面示例代码中的ViewController。但是仍然viewWillDisappear in ViewController(MoviePlayerNibViewController.m ) 不能被调用。我发现一些类似的讨论是这样的:***.com/questions/4289617/… 但它仍然无法在我的情况下工作。另一个类似的帖子:***.com/questions/1520259/…

以上是关于如何将现成的项目(使用应用程序委托创建和启动但没有 xib、nib)添加到另一个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode 4.5 中选择数据源和委托?

如何使用应用程序委托保存状态

使用应用程序委托启动 iOS 应用程序 [关闭]

委托的来由

如何将托管对象上下文分配给 iOS 中的应用程序委托?

通过反射创建委托