提问者:小点点

在Segue之间传递数据而不使用PrepareForSegue


我正在创建一个用户设置帐户使用故事板的5个步骤。每个步骤都有一个ViewController:1:)输入姓名、联系人等,2:)导入照片,3:)输入等4:)更多输入5:)确认页面,如果用户点击“确认”->获取所有输入并上传解析。

我在网上搜索时得到的唯一解决方案是创建一个函数“Prepare for Segue”并传递信息...但对我来说,这没有任何意义:

如果我有1000个viewcontroller,第一个viewcontroller信息将通过所有1000个viewcontroller传递?为什么不让1000视图控制器获取遗留下来的所有信息呢?例如:viewcontroller N:50不需要关于viewcontroller N:1的信息...这是胡说八道。

这有没有其他的办法来实施呢?

也许有一个解决方案,因为我正在使用解析,就像我做的那样:

ParseClass[“name”]=textfield.text

它将信息发送给Parse,然后它们保存这些信息,直到我执行类似SaveInBackground()的操作。

我正在尝试使用ViewControllers找到类似这样的解决方案。每个viewcontroller发送信息来解析并保存这些信息,直到在viewcontroller上发生“saveInbackground()”。

可能?谢谢


共3个答案

匿名用户

是的。有可能。您可以使用nsuserdefaults将您的信息存储到内存中,一旦存储了信息,您就可以在项目中的任何地方使用它。

就像你可以用它来储存价值:

NSUserDefaults.standardUserDefaults().setObject(yourObject, forKey: "yourKey")

现在,您可以使用您的密钥从任何地方检索此信息,如下所示:

let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")

您可以根据需要转换它的类型。

欲知更多信息,请阅读Apple的NSUserDefaults文档。

通过使用classstruct将值从一个视图传递到另一个视图而不需要segue的另一种方法。

您可以从Apple文档中阅读关于结构的更多信息。

匿名用户

如果我们的输入是有限的,则创建一个模型类,并为其提供如下属性:

@interface UserDataInput : NSObject
@property (nonatomic)NSString *name;
@property (nonatomic)NSString *contactNumber;
....
blah blah bla
....
@end

然后将其作为一个单例类

@implementation UserDataInput
+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    static UserDataInput *sharedInstance = nil;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[[self class] alloc] init];
    });
    return sharedInstance;
}
@end

然后在离开视图控制器时设置该视图控制器的属性,

UserDataInput *sharedInput = [UserDataInput sharedInstance];
sharedInput.name = self.nameField.text;
etc....

在final view controller中,您可以访问这些属性以便上载和解析。

匿名用户

试试看。

let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")
NSUserDefaults.standardUserDefaults().synchronize()