【问题标题】:iPhone SDK: How do I pass an array of values from a ViewController onto other ViewController?iPhone SDK:如何将一组值从 ViewController 传递到其他 ViewController?
【发布时间】:2011-02-22 10:21:52
【问题描述】:

我尝试在SecondViewController 中创建如下方法:

-(void)setValue:(NSMutableArray*)array
 { 
      //NSMutableArray *newArray = [[NSMutableArray alloc] init];
      newArray = [array retain];
 }

并使用名为 second 的 SecondViewController 对象从 FirstViewController 传递值:

[second setValue:existingArray];

existingArray 是一个 NSMutableArray。

可能出了什么问题?

【问题讨论】:

  • 您没有提到会发生什么,但是查看您的代码,您不需要为 newArray 执行 alloc init,因为 [array mutableCopy] 将执行数组的浅拷贝并放置它在 newArray 里面。你正在泄漏内存。
  • 发生的情况是,它没有将existingArray 的值分配给newArray。好的,即使我尝试删除 alloc init ,但它也无济于事。有什么问题?

标签: iphone objective-c cocoa-touch ios4 nsmutablearray


【解决方案1】:

在代码中,您在SecondViewController 的“second”对象中设置了数组。

所以你需要使用那个对象来显示SecondeViewController,否则它怎么可能不显示数组。

检查以下代码。

 //   In the FirstViewController

- (void)buttonClicked:(id)sender{

    SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle: nil];
 [second setValue:existingArray];
 [self.navigationController pushViewController:second animated:YES];
 [second release];

}

在代码中,我将数据分配给“第二个”对象中的数组,并使用该对象来显示控制器。

问候,

萨提亚

【讨论】:

  • @Satya:感谢您的意见。但是当我从FirstViewController 移动到SecondViewController 时,就会出现IntermediateViewIntermediateView 只是一个 NSObject 类而不是 UIViewController。 FirstViewController 转到 IntermediateView,然后控制转到 SecondViewController。所以我想existingArray 的值不会被保留。我已经为existingArray 设置了@property 和@synthesize,但仍然没有帮助。在这种情况下可以做什么?
  • 为什么需要IntermediateView?如果您想要一个有用的答案,您将需要发布更多代码..
  • @Parth:做一件事,将数组传递给中间视图。从中间视图将数组传递给 secondViewController。你也可以这样做。
  • @SorinA:实际上这是一个数组,我通过创建 coreplot。在将数组值放入newArray 后,控件转到其标题类,然后当它从标题类返回时,该值不会保留。我也尝试过声明一个属性并合成数组,但它仍然无助于保留数组值。
  • @Parth:一旦检查,您是否从 coreplot 标头获取值。表示检查 existingArray 是否包含值。
【解决方案2】:

你可以使用一个属性而不是你那里的设置器(看起来很糟糕)。问题是你真的需要在数组上做一个副本还是保留就足够了?

在 SecondViewController 中创建一个 NSMutableArray *myArray 作为局部变量。添加属性 @property(nonatomic, retain) NSMutableArray *myArray;在界面中。

合成并设置它只需调用 [mySecondViewController setMyArray:newArray];

如果您已正确实例化 SecondViewController,并且您要发送的数组不为零,那么它应该可以工作。

如果你这样做:

-(void)setValue:(NSMutableArray*)array
 { 
      NSMutableArray *newArray = [[NSMutableArray alloc] init];
      newArray = [array mutableCopy];
 }

newArray 将是在 SetValue 方法中声明的变量,程序退出 setValue 方法后,newArray 变量将不再可访问。此外,您还会泄漏内存,因为 newArray 永远不会被释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多