1

最近我陷入了一个问题,因此我无法继续进行下一个编码部分。有两个视图控制器(比如说第一个.m 和第二个.m),我想在不使用情节提要的情况下将参数数据从一个传递到另一个视图控制器。但对我来说棘手的部分是第二个视图控制器已经在 AppDelegate.m 文件中启动。

如果我在第一个视图控制器中使用一些导入头文件启动了第二个视图控制器,我可以传递数据,例如..

@import "Second.h"

Second *secondView = [[Second alloc] initWithNibName:@"SecondNib" bundle:nil];
secondView.someStringValue = @"passThisString";

但是,这种编码创建了一个新的第二个视图控制器,这不是我想要的。我发现有一个类似的东西

myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

连接到 AppDelegate.m 文件。但是经过几天的努力,我的大脑开始昏迷。请给我任何建议。有没有办法在不使用情节提要的情况下将数据传递给现有的视图控制器?或通过 AppDelegate 到第二个视图控制器的任何方式。任何帮助将不胜感激

4

3 回答 3

2

@jazzed28 您可以在不启动Second. 您只需要访问已经启动的Second. 所以Second像这样myAppDelegate.h声明property-

@property (nonatomic, strong) Second *svc;

然后,每当您需要第二次时,您都可以像这样访问-

myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

appDelegate.svc
于 2013-07-22T07:22:55.157 回答
1

在 myAppDelegate 中创建两个类方法,用于设置数据和从 Appdelegate 获取数据,您可以使用 APpdelegate 类名访问这些方法。

 Setter method
 +(void)setGlobalString:(NSString *)stringgValue{
          [[NSUserDefaults standardUserDefaults] setObject:stringgValue forKey:@"globalValue"];
     // you can save string value here by using NSUserDefaults or any thing else

    }
Getter method
+(NSString *)getGlobalString{
        return [[NSUserDefaults standardUserDefaults] forKey:@"globalValue"];
    }

你可以调用类似的方法

[myAppDelegate setGlobalString:yourString];

NSString *str = [myAppDelegate getGlobalString];
于 2013-07-22T07:08:37.620 回答
1

这个问题以前被问过很多次,包括在 StackOverflow 上。例如,如果您花了更多时间寻找答案,您可能已经找到了这个答案

于 2013-07-22T08:23:19.620 回答