1

我有一个根据用户输入修改的布尔数组(soundArray)。因此,它归用户正在与之交互的主 UIView 所有。同时,在另一个单独的控制器 (GestureController) 中,我需要访问这个 soundArray,所以我可以将它作为方法调用中的参数传递。

我很确定 ViewController 不应该挖掘它不拥有的 UIView 的属性(正确的 MVC),所以我在拥有主 UIView(MusicGridView)的 ViewController(MusicGridController)中创建了另一个指向 soundArray 的指针)。

在 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 的属性?

4

1 回答 1

1

我不确定我是否了解 NSArray 属于谁,或者它应该属于谁,但如果 AppDelegate 应该是一个全局对象(由多个视图和/或控制器访问),您可以尝试使用它。

现在,来解决你的问题。(MusicGridView *)您的实现没有错,如果您添加before ,警告将消失self.view。这和你尝试时遇到的错误有关,self.soundArray = self.view.soundArray原因很简单:UIView没有soundArray属性,并且self.view是指向 a 的指针UIView。通过转换self.view为 a MusicGridView *,您可以摆脱警告,并且您的代码应该可以正常工作。

于 2009-07-17T01:09:32.250 回答