在类之间发送数据

时间:2011-06-06 18:54:55

标签: objective-c

我似乎错过了在两个类之间发送数据的关键基本概念。我在这里读了另一篇文章,我将在一秒内对此发表评论,但这就是我所拥有的。在自定义视图类中,我得到了一个工作正常并保留的NSMutableDictionary:

@interface myView : UIView {
}

@property (nonatomic, retain) NSMutableDictionary*myDictionary;

myView中的方法使用myDictionary没有问题。例如,我可以做得很好:

 NSArray*sorted=[[NSArray alloc] initWithArray:[self.myDictionary keysSortedByValueUsingSelector:@selector(compare:)]];

在我的视图控制器中,我尝试使用自定义类中myDictionary对象中的相同数据创建一个类似的数组:

@interface myViewController : UIViewController {

}

@property (nonatomic, retain) IBOutlet myView * myView;

然后我有:

  NSArray*sorted=[[NSArray alloc] initWithArray:[self.myView.myDictionary keysSortedByValueUsingSelector:@selector(compare:)]];

但是,这个myDictionary总是空的。它不会在myView中的任何位置发布,因此它仍应包含数据。我试图在没有运气的情况下删除“自我”。

现在,我读了这篇类似的帖子:

Data not sending between classes - Objective-C

这是做这样事情的唯一方法吗?这意味着您必须将数据从源类“发送”到接收类。它表明你不能让接收类“取出”来自源类的数据,就像我在这里一样。是对的吗?更重要的是,如果这是唯一的方法,那为什么呢?

1 个答案:

答案 0 :(得分:1)

三重检查您的插座连接!然后再次检查它们。

当您通过Interface Builder连接IBOutlet时,您在另一端有一个真实的实例化对象。您可以像访问任何其他对象一样访问该对象的属性:

self.myView.hidden = NO;

如果您为该插座分配新对象:

self.myView = [[MyCustomViewClass alloc] initWithFrame:someRect];

您忘记了在xib中为您创建的视图,以及当您尝试访问该新视图的ivars时:

NSDictionary * aDict = self.myView.myDictionary;

它们与xib中其他视图的ivars没有相同的值(事实上它们可能是nil。)

向两个方向传递数据是完全可以的。您只需要有适当的参考。视图可以“发送”到控制器,但它需要引用该控制器设置:

// Get a reference to view controller somehow
self.myController = ...;
[self.myController setArray:[self.myDictionary keys...]];

由于控制器通常会引用他们的观点,因此你可能正在采取其他方式更有意义。