2015-01-30 2 views
-1

У меня есть NSMutableArray объявлен как собственность в .h и инициализируется в viewDidLoad в моем SPOCVC .m (UIViewController) ...addObject для NSMutableArray равен нулю даже после инициализации?

@property (strong, nonatomic) NSMutableArray* SPOCTrackList; 

в viewDidLoad

if ([self SPOCTrackList] == nil) { 
    self.SPOCTrackList = [[NSMutableArray alloc]init]; 
    NSLog(@"SPOTTrackList INITIALIZED"); 
} 

В отдельном ВК, я м пытается передать/AddObject к SPOCTracklist ...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


SCTrack* selectedTrack = self.trackList[indexPath.row]; 

[[[SPOCVC sharedInstance]SPOCTrackList]addObject:selectedTrack]; 
NSLog(@"%lu", (unsigned long)[[[SPOCVC sharedInstance]SPOCTrackList]count]); 

Так что мой NSMutableArray инициализируется, и я могу добавить фиктивные объекты, но почему я не могу передать его от другого VC с использованием одноэлементного или любого другого, такого как ...

SPOCVC* spocVC = self.tabBarController.viewControllers[2]; 
[spocVC.SPOCTrackList addObject:selectedTrack]; 

Спасибо, что указал мне в нужном направлении.

+0

Вместо инициализации 'SPOCTrackList' в' viewDidLoad', сделать это в соответствующем 'инициализации ... ". – rmaddy

ответ

1

Контроллеры просмотра предназначены только для того, чтобы быть вокруг, пока они находятся на экране. Они не являются местом хранения данных. Обычно, когда один контроллер просмотра напрямую разговаривает с другим контроллером представления, который он не создавал, вы делаете что-то неправильно.

Переместите SPOCTrackList в вашу модель и попросите обоих диспетчеров разговора поговорить с ней, а не друг с другом.

На контроллере просмотра никогда не должно быть «sharedInstance». Это верный признак того, что вы злоупотребляете контроллером представления в качестве модели.

Что, вероятно, происходит в вашем конкретном случае, так это то, что viewDidLoad работает на совершенно другом SPOCVC, чем ваш sharedInstance.

+0

Спасибо! Я новичок в iOS Dev. –

+0

Вы захотите изучить «Ядровые компетенции» какао «Apple» как минимум. Этот конкретный называется MVC: https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html –

-1

почему бы не использовать AppDelegate справиться с этой

appdelegate.h

// добавить свойство содержать ссылку

@property (nonatomic, copy) NSMutableArray *referenceArray; 

// разделить приложение делегата

+(AppDelegate *)sharedAppDelegate; 
@end 

в appdelegate.м

// синтезировать свойство

@synthesize referenceArray; 

// вернуть фактический делегат

+(AppDelegate *)sharedAppDelegate {return (AppDelegate *)[UIApplication sharedApplication].delegate;} 

в методе viewdidload

// добавить делегат

import "appdelegate.h" 

//в это массив

self.SPOCTrackList = [[NSMutableArray alloc]init]; 

// Добавить ссылки

[AppDelegate sharedAppDelegate].referenceArray = self.SPOCTrackList; 

и добавить где-нибудь, как этот

import "appdelegate.h" 

[[AppDelegate sharedAppDelegate].referenceArray addobject:object]; 
Смежные вопросы