1

我有一个 ViewController 类(也许我不应该那样命名那个类?)

为什么我有警告

从 AppDelegate 中的“UIViewController”分配给“ViewController”的指针类型不兼容

更新:

在这条线上

self.viewController = [[[myPlugin alloc] getPluginViewController] autorelease];

在 AppDelegate.h 我有

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

在 myPlugin 我有

-(ViewController*) getPluginViewController {
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    return self.viewController;

在 ViewController 我有

@interface ViewController : UIViewController {
4

3 回答 3

3

您的应用程序委托中的 viewController 属性可能具有类型UIViewController*,并且您正在尝试为其分配一个类型的对象ViewController*。可能您的 ViewController 类需要从 UIViewController 继承。

您的代码还有许多其他问题:

self.viewController = [[[myPlugin alloc] getPluginViewController] autorelease];

忽略分配,按照惯例,在分配对象后立即发送给对象的第一条消息应该是初始化消息。99.99% 的程序员会自动认为这是你代码中的一个可怕的错误,无论它是否是一个可怕的错误。你应该遵守约定。

此外,如果getPluginViewController遵守内存管理规则,您不拥有它返回的对象,因此您不能自动释放它。

-(ViewController*) getPluginViewController {
     self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
     return self.viewController;
}

就其本身而言,这还不错。在 Objective-C 中,按照惯例,以“get”开头的方法用于返回指针参数值的方法。然而,把它和你称之为的地方放在一起有几个问题:

  • 原始分配的 ViewController 泄漏,因为此方法返回指向不同对象的指针
  • 原始分配的 ViewController 从未初始化
  • 返回的 ViewController 会自动释放两次。
于 2012-04-25T08:11:31.420 回答
1

注意双重分配。

第一次分配[myPlugin alloc]和调用getPluginViewController. 但是在getPluginViewController你分配和初始化 newViewController并返回它。

于 2012-04-25T07:34:32.223 回答
-1

删除ViewController您认为有问题的和其他类的引用。

如果需要,请转到查找器并通过取消选中“-copy”再次添加这些类。

从产品菜单中清理项目并运行。

于 2016-01-21T08:20:45.093 回答