在另一个视图中将对象从一个视图添加到mutableArray的问题

时间:2014-05-26 16:39:38

标签: ios objective-c uitableview nsmutablearray

大家好,我一直在构建应用程序并遇到了一些问题。 我的应用程序有两个viewControllers。一个是MenuViewController,另一个是MainViewController。

我想将一个字符串从MainViewController传递到MenuViewController中的mutableArray,但不知道如何。

以下是我的代码:

<MenuViewController.h>
#import <UIKit/UIKit.h>

@interface MenuViewController : UITableViewController {
    NSMutableArray *secondFavourite;
}

@property (nonatomic, strong) NSMutableArray *secondFavourite;

@end

<MenuViewController.m>
#import "MenuViewController.h"
#import "MainViewController.h"

@interface MenuViewController ()
@property (strong, nonatomic) NSArray *menu;
@end

@implementation MenuViewController
@synthesize menu;
@synthesize secondFavourite;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.secondFavourite = [[NSMutableArray alloc] init];
    self.menu = self.secondFavourite;

}

<MainViewController.h>
#import <UIKit/UIKit.h>
#import <social/Social.h>

@interface MainViewController : UIViewController {
    IBOutlet UIImageView *imagepost;
    UILabel *predictionLabel;
}

- (IBAction)sampleSelector:(UIButton *)sender;
- (IBAction)showAllClick:(id)sender;
@property (nonatomic, retain) IBOutlet UILabel *predictionLabel;
@property (strong, nonatomic) NSArray *predictionArray;
@property (strong, nonatomic) UIButton *menuBtn;
@property (strong, nonatomic) NSMutableArray *fav;
@property (strong, nonatomic) IBOutlet UILabel *favLabel;
@property (strong, nonatomic) IBOutlet UITableView* tableView;
@property (nonatomic, strong) NSMutableArray *favourite;
@end

<MainViewController.m>

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.predictionArray = [[NSArray alloc] initWithObjects:@"Hey gurl", nil];
}

//Add to favourite

- (void) addToFav {
    self.favourite = [[NSMutableArray alloc] init];
    [self.favourite addObject:self.predictionLabel.text];
    [self.tableView reloadData];
    NSLog(@"%@", self.favourite);
}

//add to favourite button action

- (IBAction)addToFavButton:(id)sender {
    [self addToFav];

//pass data from favourite here to secondFacourite in MenuViewController (found on stack overflow)

    MenuViewController *menuViewController = [[MenuViewController alloc]initWithNibName:@"MenuViewController" bundle:nil];
    menuViewController.secondFavourite = [[NSMutableArray alloc]initWithArray:self.favourite];
    [self.navigationController pushViewController:menuViewController animated:YES];

}

我使用NSLog来检查MainViewController中的menuViewController.secondFavourite是否成功地将字符串添加到数组中,而不是MenuViewController中的数组是否是相同的数组?为什么没有menu.tableView更新并显示添加的新字符串?我很困惑,希望有人帮助我。

感谢您阅读本文。

1 个答案:

答案 0 :(得分:3)

这与您的菜单viewDidLoad正在覆盖这两行中的值这一事实有关:

self.secondFavourite = [[NSMutableArray alloc] init];
self.menu = self.secondFavourite;

第一行是将secondFavourite属性设置为空的NSMutableArray实例。并且由于viewDidLoad仅在视图加载到内存后才会被调用(在这种情况下,当您尝试将视图控制器推入堆栈时),secondFavourite属性中的初始值将是丢失。

相反,您应该将初始化代码移到init方法中。