我似乎错过了在两个类之间发送数据的关键基本概念。我在这里读了另一篇文章,我将在一秒内对此发表评论,但这就是我所拥有的。在自定义视图类中,我得到了一个工作正常并保留的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
这是做这样事情的唯一方法吗?这意味着您必须将数据从源类“发送”到接收类。它表明你不能让接收类“取出”来自源类的数据,就像我在这里一样。是对的吗?更重要的是,如果这是唯一的方法,那为什么呢?
答案 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...]];
由于控制器通常会引用他们的观点,因此你可能正在采取其他方式更有意义。