文件的所有者混淆iOS

时间:2011-12-21 15:35:19

标签: ios

假设我有以下xib:

  • IssueSelectorViewController
    • 文件所有者:IssueSelectorViewController
  • IssueCell - 文件所有者 - IssueSelectorViewController
    • 文件所有者:IssueSelectorViewController

在IssueSelectorViewController.h文件中,我有以下内容:

@interface IssueSelectorViewController : UIViewController <AQGridViewDelegate, AQGridViewDataSource, ReaderViewControllerDelegate,UIScrollViewDelegate, IconDownloaderDelegate>
@property (nonatomic, strong) IBOutlet AQGridView * gridView;
@property (nonatomic, strong) IBOutlet IssueCell *gridViewCellContent;
...
@end

IssueSelectorViewController.xib内,我从gridView - &gt;实际网格视图中建立了一个插座连接。这对我来说很有意义,因为我在这个对象中有一个网格视图,并希望连接到它,所以我可以从代码访问它。

单击文件所有者时,在IssueCell.xib内,我有一个插座gridViewCellContent,我与IssueCell对象建立了连接。这可以运行,并允许我的程序运行,但这是真的在做什么?在IssueSelectorviewController中,我需要访问IssueCell来计算每个单元格的宽度和高度。我看到这是在一个例子中完成的,但我完全不理解。

编辑:

这是我使用self.gridViewCellContent的地方,这是如何工作的?它指向哪个IssueCell?

- (CGSize)portraitGridCellSizeForGridView:(AQGridView *)aGridView
{
    [[NSBundle mainBundle] loadNibNamed:@"IssueCell" owner:self options:nil];
    return self.gridViewCellContent.frame.size;
}

1 个答案:

答案 0 :(得分:9)

笔尖中的“文件所有者”是代理或占位符。当实际加载nib时,与该占位符的任何连接都是对实际拥有nib的实际对象进行的。因此,当您执行[UIViewController initWithNibName:bundle:]时,文件的所有者占位符将替换为实际的视图控制器对象。

加载自定义表格视图单元格时非常相似(我假设您在tableView中执行此操作:cellForRowAtIndexPath:方法)。您加载nib,指定所有者,并且该所有者对象获取“文件所有者”占位符在nib本身中具有的所有连接。

我希望这有道理吗?

如果您发布了tableView:cellForRowAtIndexPath:,则可以看到该连接的位置。 (或者,如果您为tableView注册了一个nib,那么您在创建它时指定了所有者。)

修改

好的,所以从你发布的代码:

[[NSBundle mainBundle] loadNibNamed:@"IssueCell" owner:self options:nil];

您将所有者指定为'self',因此'self.gridViewCellContent'应该是刚从nib加载的新单元格,假设您在nib中建立了正确的连接。加载笔尖后,对笔尖中“文件所有者”的任何连接现在都将变为“自我”(您的视图控制器)。

(看起来很奇怪你在那里加载nib,当那个方法需要一个AQGridView *作为参数时,但我想你知道你在那里做什么)