在另一个ViewController中标识ViewController的实例

时间:2012-03-16 22:01:35

标签: iphone ios

在我的应用程序中,我有两个视图控制器 - 一个UIViewController和UITableViewController。 现在,在我的TableViewController实现中,我需要从UIViewController(属性 - 数组)中检索一些数据。它合成的数组,所以我实际上在做的是在UITableViewController的实现中,我正在创建一个UIViewController的实例,一个数组,只需将数组设置为[myUIViewController getTheArray]。我知道它不会以这种方式工作,它只是检索nil,但在我的VC中它实际上充满了数据。我在这一点上陷入困​​境,我可以尝试使用performSegueWithIdentifier方法,但这些视图并不是通过segue直接相互连接的。它们嵌入在Tab栏视图中,我的ViewController与我的TableViewController完全无关。 有关如何正常工作的任何想法? 感谢。

@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];
}

我希望这说清楚。

1 个答案:

答案 0 :(得分:2)

我不是100%肯定我明白你的意思所以如果我误解了什么请做评论。另外,我自己也是iOS开发的新手。

好的,所以你有一个带有UIViewController和UITableViewController的Tab栏控制器。您的UIViewController实现有一些数据,您的UITableViewController需要访问该数据。你不能只是创建一个新的classA。您需要引用您创建的classA的实例并将其放入标签栏。

你可以做的一件事是让AppDelegate知道UIViewController(即AppDelegate有一个引用UIViewController的属性。然后在你的UITableViewController中,你可以做这样的事情来访问UIViewController:

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

听起来像一个真正简单的应用程序,所以可能使用像Core Data这样的东西可能过于复杂。您可以在上面执行的另一种方法是让您的ClassA实例设置一些singleton的值,然后从中读取ClassB。或者只是创建一个由UIViewController写入并从表视图中读取的AppDelegate属性。