【问题标题】:How to subclass UIApplication?如何继承 UIApplication?
【发布时间】:2009-09-09 11:46:01
【问题描述】:

iPhone 参考库 - UIApplication 说我可以继承 UIApplication,但如果我尝试这样做,我会得到一个异常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'

这让我想起了汉兰达“只能有一个,。:-)

我是否必须将其他参数传递给 UIApplicationMain?还是我看错了图书馆里的东西?

【问题讨论】:

标签: iphone


【解决方案1】:

您是否将子类的名称传递给 UIApplicationMain?假设你有

@interface MyUIApp : UIApplication 
...

然后在 main() 中你应该这样做:

NSString* appClass = @"MyUIApp";
NSString* delegateClass = nil;
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);

【讨论】:

  • 嗨,我已经尝试了与回答中建议的方法相同的方法...但我仍然遇到相同的错误...我还需要做什么...?
  • 我怎样才能检索这个“MyUIApp”类的对象?
  • MyUIApp* app = [UIApplication sharedApplication];
  • @TeemuKurppa swift 4 或更高版本是什么?
  • @JamshedAlam 相同,但使用 Swift 语法。 developer.apple.com/documentation/uikit/…
【解决方案2】:

在您应用的 info.plist 中,确保将 NSPrincipalClass 键更改为您的子类的名称。这将使 Cocoa 在应用程序加载时实例化正确的类 - 除了让子类正常工作之外,您不需要做任何事情。

【讨论】:

  • 我的 info.plist 中没有 NSPrincipalClass 键。我应该添加它吗?
  • 是的 - 您的 Info.plist 中可能有很多很多键 - 默认情况下它们并不全部包含在内。
  • 这似乎只适用于 Mac OS X,不适用于 iPhone OS:developer.apple.com/iphone/library/documentation/General/…
  • 适用于 tvOS(我肯定也适用于 iOS),应该是公认的答案。
【解决方案3】:

我知道这是一个旧答案,并且可以接受的答案是好的,但要说清楚......

假设你有:

UIApplication 子类为MyApplication

UIApplicationDelegate 子类为MyAppDelegate

那么你的 main.m 看起来像:

#import <UIKit/UIKit.h>

#import "MyApplication.h"
#import "MyAppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool
    {
        return UIApplicationMain(argc,
                                 argv,
                                 NSStringFromClass([MyApplication class]),
                                 NSStringFromClass([MyAppDelegate class]));                
    }
}

如果您没有子类化 UIApplicationUIApplicationDelegate,您只需将 nil 作为相应参数传递给 UIApplicationMain

【讨论】:

  • 什么是快速实施?
【解决方案4】:

一个应用中只能有一个UIApplication实例,不要初始化一个新的应用对象,使用UIApplication的静态方法:+ (UIApplication *)sharedApplication。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多