0

我是 iOS 开发的新手,我想将 NSMutableArray 从一个视图控制器传递到另一个视图控制器,但总是给我空值

第一视图控制器.h

@interface FirstViewController : UIViewController

@property (nonatomic, retain) NSMutableArray *colorArray;
-(IBAction)btn:(id)sender;

第一视图控制器.m

@implementation FirstViewController


-(IBAction)btn:(id)sender
{


  SecondViewController* secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    secondViewController.animalArray = self.colorArray;

    NSLog(@"%@",secondViewController.animalArray); // here its not null

    [self.navigationController pushViewController:secondViewController animated:YES];

}

SecondViewController.h

@interface SecondViewController : UIViewController

@property (nonatomic, retain) NSMutableArray *animalArray;

第二视图控制器.m

我只使用了 NSLog(@"animalArray:%@",self.animalArray); 在 viewDidLoad 中检查值但给我 null

有什么我想念的吗?

编辑 :

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"indidLoad%@",self.animalArray);


}

- (void)viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];

    NSLog(@"inwillAppear%@",self.animalArray);


 }
4

6 回答 6

4

替换为以下方法

-(IBAction)btn:(id)sender{
      SecondViewController* secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
         secondViewController.animalArray=[[NSMutableArray alloc]initWithArray:self.colorArray];
        [self.navigationController pushViewController:secondViewController animated:YES];
    }

:) +1

于 2013-07-25T10:19:59.933 回答
0

它应该工作

-(IBAction)btn:(id)sender
{


    SecondViewController* secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    NSLog(@"%@",secondViewController.animalArray); // here its not null

    [self.navigationController pushViewController:secondViewController animated:YES];
    secondViewController.animalArray = self.colorArray;

}

有时,如果您在推送视图之前传递值,它将在第二个视图中给出空值

于 2013-07-25T11:33:39.903 回答
0

检查值viewWillAppear而不是viewDidLoad

于 2013-07-25T10:28:57.797 回答
0

如果你从 (void)viewWillAppear:(BOOL) 动画调用你的 NSLog,你应该会看到一些东西。

在您的代码示例中, viewDidLoad 方法在 initWithNibName 之后直接调用:

[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

在您有机会设置您的财产之前。

于 2013-07-25T10:23:18.667 回答
0
    **FirstViewController.h**

@interface FirstViewController : UIViewController
{
    NSMutableArray *SongArray;
}
@property(nonatomic,retain)NSMutableArray *SongArray;

**FirstViewController.m**

    SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];    
    secondView.SongArray = self.SongArray;

    [self.navigationController secondView animated:YES];


    **SecondViewController.h**

    @interface SecondViewController : UIViewController
    {
        NSMutableArray *SongArray;
    }
    @property(nonatomic,retain)NSMutableArray *SongArray;

这样做你的价值观没有被保留。还请检查Pass NSMutableArray to one view controller to another

于 2013-07-25T10:28:31.050 回答
-2

更好的方法是在 Appdelegate 文件中创建您的 NSMutableArray,如下所示...

@property (nonatomic, retain) NSMutableArray *animalArray;//define this in Appdelegate.h file

在 Appdelegate.m 文件中合成它,如

@synthesize animalArray;

在 prefix.pch 文件中创建 Appdelegate 对象,如下所示。

#define AppDel ((AppDelegate *)[UIApplication sharedApplication].delegate)

并在 prefix.pch 中导入您的 Appdelegate 文件,如下所示。

#import "AppDelegate.h"

现在你想在哪里使用那个数组......就像下面这样写......

 AppDel.animalArray=//you can do whatever you want with array....

通过这样做,无需将数组传递给其他视图控制器,您可以在整个项目中使用该全局数组,您可以在任何类的该数组中插入对象,并且可以在任何类中访问。

让我知道它是否有效!

编码快乐!!!!

于 2013-07-25T10:18:52.587 回答