2012-03-16 4 views
1

В моем приложении у меня есть два контроллера просмотра - UIViewController и UITableViewController. Теперь в моей реализации TableViewController мне нужно получить некоторые данные из UIViewController (массив свойств). Массив, который он синтезировал, поэтому то, что я на самом деле делаю, это то, что в реализации UITableViewController я создаю экземпляр моего UIViewController, массив и просто устанавливаю массив в [myUIViewController getTheArray]. Я знаю, что это не сработает, это просто поиск нуль, но в моем VC на самом деле полно данных. Я застрял в этой точке, я мог бы попробовать с помощью метода performSegueWithIdentifier, но эти представления напрямую не связаны через segue друг с другом. Они встроены в представление панели вкладок, и мой ViewController не имеет абсолютно никакого отношения к моему TableViewController. Любая идея о том, как правильно это сделать? Спасибо.Идентификация экземпляра ViewController в другом ViewController

@interface classA : UIViewController 

@property (strong, nonatomic) Playlist* playlist; 

-(Playlist*) getTheCurrentPlaylist; 
@end 

@implementation classA 

@synthesize playlist = _playlist; 
// add data to _playlist 
-(Playlist*) getTheCurrentPlaylist{ 
return _playlist; 
} 
@end 

сейчас, ClassB

@interface classB : UITableViewController 
@property (strong ,nonatomic) Playlist* playlistTab; 
@end 

@implementation classB 
@synthesize playlistTab = _playlistTab; 

-(void) viewDidLoad{ 
[super viewDidLoad]; 
classA *cla = [[classA alloc] init]; 
// what has to be done here? 
_playlistTab = [cla getTheCurrentPlaylist]; 
} 

Я надеюсь, что это проясняет.

+0

Хотел бы я понять, что вы пытались сказать. Можете ли вы попытаться сделать это более понятным, возможно, с небольшими фрагментами кода? –

+0

Код в данный момент находится в главном сообщении. – nemesis

+0

Что вы сделали, чтобы отладить это? Вы установили точки останова и проверили, что метод вызван? Вы подтвердили, что в точке останова, когда он вызывается, возвращаемое значение не равно нулю? – Jim

ответ

2

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

Итак, у вас есть контроллер панели вкладок с UIViewController и UITableViewController. У вашей реализации UIViewController есть некоторые данные, и ваш UITableViewController нуждается в доступе к этим данным. Вы не можете просто создать новый классA. Вам нужно обратиться к экземпляру класса A, который вы создали, и поместить в панель вкладок. .

Одна вещь, которую вы можете сделать, это иметь AppDelegate знать о UIViewController (т.е. AppDelegate имеет свойство, которое ссылается на UIViewController Тогда в вас UITableViewController, вы можете сделать что-то вроде этого, чтобы получить доступ к UIViewController:

MyAppDelegate *appDel = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.myUIViewController.playlist; 

Звучит как простое приложение, поэтому, возможно, использование чего-то типа Core Data может быть чрезмерно сложным. Другой способ, которым вы можете сделать выше, - это чтобы ваш экземпляр ClassA установил значения некоторого значения singleton, а затем прочитал ClassB. просто создайте свойство своего AppDelegate, которое будет написано UIViewController и прочитано из вашего вида таблицы.

+0

Спасибо за ответ, но я получаю сообщение об ошибке «свойство« myUIViewController »не найден на объекте типа« MyAppDelegate * ». – nemesis

+0

Ну, вы не можете просто скопировать этот код ... Хорошо, а) в вашем appdel создайте свойство, называемое плейлистом. б) из класса А используйте код выше, чтобы получить appDel, а затем установите список воспроизведения, когда список воспроизведения будет сохранен/изменен. c) наконец, из класса b, используйте код выше, чтобы получить appDel и прочитать из списка воспроизведения. –

+0

Сэр, вы спасатель жизни! Он начал работать как часы! Мне просто пришлось использовать appDelegate.playlist (без UIViewController). Большое большое спасибо! – nemesis

Смежные вопросы