我有一个基于用户输入修改的布尔数组(soundArray)。因此,它由用户正在与之交互的主UIView拥有。同时,在另一个单独的控制器(GestureController)中,我需要访问此soundArray,因此我可以将其作为方法调用中的参数传递。
我很确定ViewController不应该挖掘它不拥有的UIView的属性(正确的MVC),所以我在ViewController(MusicGridController)中创建了另一个指向soundArray的指针,该指针拥有main UIView(MusicGridView)。
在GestureController中,我有以下代码:
// instantiate the sound thread
NSArray *soundArrayPointers = [NSArray arrayWithObjects:self.musicGridViewController.soundArray, nil];
[NSThread detachNewThreadSelector:@selector(metronome:) toTarget:[MusicThread class] withObject:soundArrayPointers];
(最终我在该数组中会有更多的soundArrays)。
现在,在MusicGridController中,我需要在UIView MusicGridView中设置指向SoundArray的指针...所以我这样做了:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.frame = CGRectMake(20, 0, 480, 480);
MusicGridView *tempview = self.view; // this line gives me a warning that I am initializing from a distinct Objective-C type, which I don't understand.
self.soundArray = tempview.soundArray;
}
我尝试过self.soundArray = self.view.soundArray,但它犯了一个错误,我不明白为什么。所以我的问题是:这是一个正确的实现吗?如何从一个viewController获取给定UIView的属性?
答案 0 :(得分:1)
我不确定我理解NSArray属于谁,或者应该属于谁,但如果它应该是一个全局对象,你可以尝试使用AppDelegate(访问超过一个视图和/或控制器。)
现在,解决您的问题。您的实施没有错,如果您在(MusicGridView *)
之前添加self.view
,警告就会消失。这与您尝试self.soundArray = self.view.soundArray
时遇到的错误有关,原因很简单:UIView
没有soundArray
属性,而self.view
是指向一个UIView
。通过将self.view
转换为MusicGridView *
,您可以摆脱警告,并且您的代码应该可以正常运行。