我想在桌面上显示一些数据,我们称之为“TabeView”应用程序。
所以我在XCode上创建了一个“基于导航的”应用程序,它在“classes文件夹”中提供了4个文件。
现在,我想使用“didFinishLaunchingWithOptions”方法在TableViewAppDelegate中设置数据,我使用了一个数组。
然后,我需要将此数组“发送”到RootViewController。我在RootViewController中有一个数组变量,所以我假设我需要从TableViewAppDelegate“设置”RootViewController中的数组变量。我怎么能这样做?
我遇到的问题是,我不知道如何在TableViewAppDelegate中设置RootViewController中的数组变量。我想知道下面的内容是否可行
....
[RootViewController setMyArray:myArray];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
....
但我不知道如何调用“RootViewController”。
希望我有道理。谢谢。
答案 0 :(得分:0)
navigationController.myArray = myArray;
之前
[window addSubview:navigationController.view];
答案 1 :(得分:0)
首先,在RootViewController类中为数组变量创建一个属性。所以例如如果您的数组变量名为myArray,则代码可能如下所示:
在RootViewController.h中:
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController {
NSArray *myArray;
}
@property (nonatomic, retain) NSArray *myArray;
@end
并在RootViewController.m中添加相应的@synthesize行:
#import "RootViewController.h"
@implementation RootViewController
@synthesize myArray;
// methods here
@end
现在您可以像这样设置RootViewController对象的myArray成员:
myRootViewController.myArray = [NSArray arrayWithObjects:@"foo", @"bar", nil];
现在,在您的app委托类中,您可以使用self.navigationController的viewControllers属性来返回导航堆栈中的视图控制器。根控制器将始终位于索引0处.viewControllers将返回NSArray,其元素的类型为NSObject,因此您还需要强制转换为RootViewController指针。这里有两行,以使演员明确:
// get a pointer to the root view controller
id obj = [self.navigationController.viewControllers objectAtIndex:0];
// cast it to a RootViewController pointer
RootViewController* rvc = (RootViewController*)obj;
// Now you can set the array
rvc.myArray = someArray;
(为了在你的app委托类中使用RootViewController类名,你需要导入相关的头文件 - 把它放在TableViewAppDelegate.m的顶部:
#import "RootViewController.h"
就是这样!
P.S。请记住,将myArray属性声明为类型(非原子,保留)意味着您的RootViewController对象将最终指向您传递给它的相同的NSArray 实例。所以,例如:
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"foo", @"bar", nil];
myRootViewController.myArray = array;
[array removeAllObjects]; // myRootViewController.myArray is now empty!
您可以使用(非原子,复制),在这种情况下,您的RootViewController对象将复制您传入的数组并保留该数组。将数组分配给RootViewController对象后对数组的更改不会影响副本。