Передача NSMutableArray другому контроллеру представления - не работает - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть контроллер представления PlayerViewController, я пытаюсь передать NSMutableArray: Stories, в контроллер представления PlaylistViewController

в файле PlayerViewController.h, который у меня есть

@class PlaylistViewController;

в файле PlayerViewController.m у меня есть

//stories is a NSMutableArray that does have content in it
PlaylistViewController *sVC = [[PlaylistViewController alloc] initWithNibName:@"PlaylistViewController" bundle:nil];
    sVC.playSongArray = [[NSMutableArray alloc]init];
    sVC.playSongArray = stories; 

в файле PlaylistViewController.h, который у меня есть

NSMutableArray *playSongArray;

и

@property(nonatomic,retain)NSMutableArray *playSongArray;

Я также синтезирую его в файле .m

Но когда я запускаю код, playSongArray в PlaylistViewController пуст. Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Как вы представляете эту точку зрения? Я видел несколько раз, где мне приходилось представлять представление перед тем, как задавать такие свойства, чтобы они применялись правильно. Кажется, что представление не полностью инициализировано, пока оно не будет представлено / отображено, и часть процесса инициализации устанавливает свойства в nil.

Если вы представляете это модально, попробуйте следующий порядок.

//stories is a NSMutableArray that does have content in it
PlaylistViewController *sVC = [[PlaylistViewController alloc] initWithNibName:@"PlaylistViewController" bundle:nil];
[self presentModalViewController:svc animated:YES]; // if modal
[self pushViewController:svc animated:YES]; // if part of a uinavigationcontroller
sVC.playSongArray = [[NSMutableArray alloc]init];
sVC.playSongArray = stories; 
0 голосов
/ 08 декабря 2011

Я подозреваю, что вы проверяете значение playSongArray слишком рано.Ваш PlaylistViewController должен выглядеть следующим образом:

@interface PlaylistViewContror {
  NSMutableArray *playSongArray;
}

- (id)initWithPlaySongArray:(NSMutableArray *)array;

@property(nonatomic,retain)NSMutableArray *playSongArray;

@end

@implementation PlaylistViewContror

@synthesize playSongArray;

- (id)initWithPlaySongArray:(NSMutableArray *)array
{
  if (!(self = [super initWithNibName:@"PlaylistViewController" bundle:nil]))
    return nil;

  playSongArray = array;

  return self;
}

- (void)awakeFromNib
{
  // do things with playSongArray here
}

@end

А затем в вашем PlayerViewController вы просто делаете:

//stories is a NSMutableArray that does have content in it
PlaylistViewController *sVC = [[PlaylistViewController alloc] initWithPlaySongArray:stories];
0 голосов
/ 08 декабря 2011

Вместо:

sVC.playSongArray = [[NSMutableArray alloc]init];
sVC.playSongArray = stories; 

Попробуйте

sVC.playSongArray = [[NSMutableArray alloc]initWithArray:stories]; 

Если это не работает, в вашем контроллере PlaylistViewController добавьте функцию playSongArray = [[NSMutableArray alloc]init]; в initWithNibName, затем создайте функцию:

- (void)setPlaySongs:(NSArray *)songs {
[playSongArray addObjectsFromArray:songs];
}

и загрузите контроллер вида следующим образом:

PlaylistViewController *sVC = [[PlaylistViewController alloc] initWithNibName:@"PlaylistViewController" bundle:nil];
[sVC setPlaySongs:stories];
...