Objective c 在两个不同的nib文件中访问同一对象

Objective c 在两个不同的nib文件中访问同一对象,objective-c,cocoa-touch,cocoa,xib,nib,Objective C,Cocoa Touch,Cocoa,Xib,Nib,我想知道如何在两个不同的XIB中访问特定类的对象的相同引用 我理解,通过在每个xib中为类创建对象引用,可以创建不同的对象。即使在使用AppDelegate时,也无法创建不同的对象。 我想要实现的是,两个XIB中引用的对象应该是相同的(例如,我可以将该对象用作两个不同表视图的数据源) 只创建一次对象,并将其放置在两个类都可以访问的位置。例如,可以将对象创建为应用程序委托的属性。然后加上 AppDelegate *app = [[UIApplication sharedApplication] d

我想知道如何在两个不同的XIB中访问特定类的对象的相同引用

我理解,通过在每个xib中为类创建对象引用,可以创建不同的对象。即使在使用AppDelegate时,也无法创建不同的对象。 我想要实现的是,两个XIB中引用的对象应该是相同的(例如,我可以将该对象用作两个不同表视图的数据源)


只创建一次对象,并将其放置在两个类都可以访问的位置。例如,可以将对象创建为应用程序委托的属性。然后加上

AppDelegate *app = [[UIApplication sharedApplication] delegate];

(导入
AppDelegate.h
后)并使用
app.objectName
访问对象只创建一次对象,并将其放置在两个类都可以访问的位置。例如,可以将对象创建为应用程序委托的属性。然后加上

AppDelegate *app = [[UIApplication sharedApplication] delegate];

(导入
AppDelegate.h
后)并使用
app.objectName

访问对象,另一个答案可以,但设计不好

你应该坚持告诉别人不要问规则。为您的对象提供您希望他们使用的数据源,不要让他们要求数据源,这实际上是一个令人讨厌的全局问题

另一个问题是您对NIB的理解。它们存储一个对象图,当加载nib时,该图被取消归档,其中的每个对象都被实例化。如果图形中有两个相同的对象,那么最终将有两个实例而不是对一个实例的两个引用。同样,当您拖出多个视图时,您会得到多个
UIView
(和子类)实例,这正是您所期望的


学习在nib中可以/不能做的事情和在代码中必须做的事情之间的界限,以及它们是如何结合在一起的,这是非常值得的。

另一个答案是可行的,但这是一个糟糕的设计

你应该坚持告诉别人不要问规则。为您的对象提供您希望他们使用的数据源,不要让他们要求数据源,这实际上是一个令人讨厌的全局问题

另一个问题是您对NIB的理解。它们存储一个对象图,当加载nib时,该图被取消归档,其中的每个对象都被实例化。如果图形中有两个相同的对象,那么最终将有两个实例而不是对一个实例的两个引用。同样,当您拖出多个视图时,您会得到多个
UIView
(和子类)实例,这正是您所期望的

学习在nib中可以/不能做的事情和在代码中必须做的事情之间的界限,以及它们是如何结合在一起的,这是非常值得的。

有趣
尝试使用单例方法,查看此链接
使用这种方法,您可以创建一个在整个应用程序生命周期中都可用的实例
尝试使用单例方法,查看此链接

使用这种方法,您可以创建一个在整个应用程序生命周期中都可用的实例

,但我想我仍然不能在我的xib中使用它作为对象。在我的两个不同的XIB中创建AppDelegate对象仍然会返回两个不同的AppDelegate对象和两个不同的IVAR。在代码中使用[NSApp delegate](在cocoa中)并访问AppDelegate对象每次都会返回相同的对象,就像您所说的。但是,当我在每个xib中创建一个AppDelegate对象,并使每个对象成为我的应用程序的委托时,它会返回不同的对象;上面的代码只是创建一个指向现有应用程序委托的指针。如果你的代码中只有这些,那么你就不会再创建一个(如果可能的话)。@Dustin我也这么认为,但当我在xib中获取AppDelegate对象时,它会将这个新对象作为委托,而不是指向NSApplication的当前委托。我猜像下面这样的代码正在发生:
AppDelegate*appD=[AppDelegate alloc]init]
[NSApp setDelegate:appD]但我想我仍然不能在我的xib中使用它作为对象。在我的两个不同的XIB中创建AppDelegate对象仍然会返回两个不同的AppDelegate对象和两个不同的IVAR。在代码中使用[NSApp delegate](在cocoa中)并访问AppDelegate对象每次都会返回相同的对象,就像您所说的。但是,当我在每个xib中创建一个AppDelegate对象,并使每个对象成为我的应用程序的委托时,它会返回不同的对象;上面的代码只是创建一个指向现有应用程序委托的指针。如果你的代码中只有这些,那么你就不会再创建一个(如果可能的话)。@Dustin我也这么认为,但当我在xib中获取AppDelegate对象时,它会将这个新对象作为委托,而不是指向NSApplication的当前委托。我猜像下面这样的代码正在发生:
AppDelegate*appD=[AppDelegate alloc]init]
[NSApp setDelegate:appD]听起来你想在笔尖中使用外部对象。看看这个问题的公认答案:@rob-是的。这就是我一直在寻找的解决方案。谢谢。但唯一的问题是我不知道在哪里可以找到外部/代理对象。我在我的对象库中找不到它。我使用的是Xcode 4.2。显示外部对象在对象库中的外观。我在这里找到了图像:尝试在对象库下的搜索框中键入“external”。它不在那里