如何在AppDelegate上设置初始视图控制器(在Storyboard中创建)的属性?

时间:2014-10-15 21:55:07

标签: ios objective-c appdelegate

我正在AppDelegate.m didFinishLauncingWithOptions方法中调用API。检索到的JSON将被转换为NSArray个对象。我想将第一个视图控制器的属性设置为该数组,以便视图控制器可以使用这些对象的latitudelongitude属性来映射位置。

这样的事情:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // array retrieved - in actual application, this is an API call and translation
    Obj *object1 = [[Obj alloc] init];
    Obj *object2 = [[Obj alloc] init];
    Obj *object3 = [[Obj alloc] init];

    NSArray *arrayOfObjectsToMap = [NSArray arrayWithObjects:object1, object2, object3, nil];

    // pass object array along to first view controller
    firstController.objectList = arrayOfObjectsToMap;

    return YES;
}

我无法弄清楚如何在第一个控制器上设置属性,这是在Storyboard中创建的。 AppDelegate的self.window.rootViewController类型为UIViewController,我的初始控制器类型为MapViewController,其NSArray属性类似于上面示例中的objectList属性

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法使用segue将数据传递给视图控制器。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"showDetailSegue"]){
        ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
        controller.isSomethingEnabled = YES;
    }
}

请按照以下帖子了解更多详情。 Passing Data between View Controllers

答案 1 :(得分:0)

我决定通过将创建的对象保存到Core Data来解决这个问题(或者,我可以使用Singleton或其他一些存储)并创建我的初始视图控制器来从Core Data中读取对象。

答案 2 :(得分:0)

确保导入视图控制器的头文件:

#import "MapViewController.h"

然后,因为您知道您的初始视图控制器是MapViewController类型,只需向表达式添加一个强制转换:

((MapViewController *)firstController).objectList = arrayOfObjectsToMap;

为了使其更安全,您可以检查视图控制器是否真的是MapViewController

if ([firstController isKindOfClass:[MapViewController class]]) {
    ((MapViewController *)firstController).objectList = arrayOfObjectsToMap;
}

<强>更新

另一种选择是投票权,您可以在其中分配firstController变量:

MapViewController *firstController = (MapViewController *)self.window.rootViewController;