将数组从控制器传递到视图

时间:2010-12-05 23:31:39

标签: iphone objective-c

我有:

  1. 的UIView
  2. 的UIViewController
  3. 在UIViewController中,我需要能够将项插入到6个整数的固定数组中。然后,我需要将此数组传递给视图,以便它分析数组并适当地更新屏幕。我该怎么做呢?我尝试过使用标准C阵列,但似乎没有用?

3 个答案:

答案 0 :(得分:2)

您不能将C数组用作方法的参数,也不能将它们传递给某些东西。您有两种选择:

  1. 使用六个NSNumber的NSArray,每个NSNumber包含一个int。
  2. 使用指向C数组的指针。
  3. 您选择哪一个取决于您。选项1更像iPhone。选项2的内存消耗较少。

答案 1 :(得分:1)

因为目标c不允许将C数组传递给目标c方法,除非它们作为指针发送,这是一种方法:

// MyViewController.m
#define BOX_INT(ARG_1) [NSNumber numberWithInt:ARG_1];

....

-(void) somethingHappened:(id) sender
{
    // initialize the array:
    NSArray *array = [NSArray arrayWithObjects:BOX_INT(ints[0]), BOX_INT(ints[1]), BOX_INT(ints[2]), BOX_INT(ints[3]), BOX_INT(ints[4]), BOX_INT(ints[5]), nil];
    [myView passArray:array];
}


// MyView.m
#define UNBOX_INT(ARG_1) [ARG_1 intValue];

....

-(void) passArray:(NSArray *) array
{
     int intArray[6];

     for (int i = 0; i < 6; i++)
     {
          intArray[i] = UNBOX_INT([array objectAtIndex:i]);
     }

     ...
}

或者,你可以传递指针(不推荐)

// MyController.m

-(void) somethingHappened:(id) sender
{
    [myView passArray:ints];
}

-(void) passArray:(int *) array
{
    // think of array as an integer array, with a length of 6.
}

答案 2 :(得分:0)

一直在讨论如何在两个类之间共享对象。 从广义上讲,有三种方法: -

  1. Singleton Objects
  2. 全球变量
  3. Appdelegate变量
  4. 但是,如果你真的想将一个数组从ViewController传递给View,我建议你选择第三种方法,即AppDelegate Variables。是的,总是指出这是快速 Dirty 方法。

    所以你可以做的是在Appdelegate中声明和数组。

    现在在ur viewcontroller

    中将项插入到该数组中
    UrAppDelegate* delegate = (UrAppDelegate*)[[UIApplication sharedApplication]delegate];
    [delegate.urArrayName addObject:@"someObject"];
    

    然后当你想在你的视图中使用它时......继续使用上面相同的方法。