我正在AppDelegate.m didFinishLauncingWithOptions
方法中调用API。检索到的JSON将被转换为NSArray
个对象。我想将第一个视图控制器的属性设置为该数组,以便视图控制器可以使用这些对象的latitude
和longitude
属性来映射位置。
这样的事情:
- (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
属性
答案 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;