为什么我的IBOutlet在ARC下发布?

Joh*_*her 6 cocoa-touch iboutlet ios automatic-ref-counting

问题

IBOutlet在我有机会使用之前就已发布.

我想要的是

我想从我的app委托访问导航控制器,以便我可以重新加载表视图.

我的设置

我有:

  • 在目标设置中设置为主界面的Main.xib
  • 导航控制器的IBOutlet作为我的app代表上的ivar
  • 这个IBOutlet连接到Main.xib中正确的导航控制器
  • App Delegate在xib中实例化,但未设置为File的所有者

我正在使用ARC,Xcode 4.3.2和iOS5.1

我试过的

  • 更改部署目标
  • 在dealloc上为导航控制器,app委托设置一个断点 - 它们从未被调用过
  • 阅读我在ARC和IBOutlets上可以找到的一切 - 似乎没有任何东西与我正在做的事情相矛盾
  • 创建一个只需要最少类的新项目 - 我看到完全相同的问题

KPAppDelegate.h

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> {
    IBOutlet  KPBrowseExpensesNavigationController *nc;
}

@property (strong) IBOutlet KPBrowseExpensesNavigationController *nc;
Run Code Online (Sandbox Code Playgroud)

KPAppDelegate.m

@implementation KPAppDelegate

@synthesize nc;

-(void)setNc:(KPBrowseExpensesNavigationController *)nc_ {
    nc = nc_; // This gets called on view load and nc gets set.
}

...snip...

// This is called about 5 seconds after app startup
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
        // By the time we get here, nc is nil.
        UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0];
        [[tvc tableView] reloadData];
}

@end
Run Code Online (Sandbox Code Playgroud)

UPDATE

必须在这里做一些非常愚蠢的事情.即使是一个非常简单的项目仍然显示这个问题.见下面的链接.

下载一个显示问题的简单测试项目.

Adr*_*uta 2

在 Window nib 中,将 FilesOwner 类设置为 UIApplication,然后将其委托从 Outlet 指向 AppDelegate 对象。这就是您的项目示例中的错误所在。