不使用PrepareForSegue在segue之间传递数据

3
我正在使用Storyboard创建一个包含5个步骤的用户设置账户。每个步骤都有一个ViewController:1)输入姓名、联系方式等;2)导入照片;3)输入等;4)更多输入;5)确认页面。如果用户单击“确认”,则获取所有输入并上传到Parse。
当我在网上搜索时,唯一的解决方案是创建一个“准备转场”函数并传递信息...但对我来说,这没有任何意义:
如果我有1000个ViewController,第一个ViewController的信息将通过所有1000个ViewController传递?为什么不是第1000个ViewController获取留下来的所有信息?例如,ViewController nº50不需要ViewController nº1的信息...这是无意义的。
是否有其他实现方式?
也许有一个解决方案,因为我正在使用Parse,就像我这样做时:
ParseClass ["Name"] = textfield.text
它会将信息发送到Parse,并保存信息,直到我执行类似SaveInBackground()的操作。
我正在尝试找到类似于此的解决方案,使用viewcontrollers。每个viewcontroller将信息发送到parse并保存该信息,直到在ViewController nº5上发生“saveinbackground()”。
可能吗?谢谢。

确实是一个不错的问题。我会搜索一下来了解它。 - Syed Ali Salman
3个回答

5

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

例如,您可以使用以下方式存储值:

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

现在您可以通过您的Key从任何地方检索此信息,方法如下:

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

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

有关更多信息,请阅读苹果公司为NSUserDefaults提供的文档

还有一种方法可以在没有segue的情况下使用结构将值从一个视图传递到另一个视图。

您可以从苹果公司的文档中了解有关结构的更多信息。


2
我建议不要使用NSUserDefaults来存储普通应用程序数据,而是像@Johnykutty建议的那样使用模型类。 - Luke

1
如果我们的输入是有限的,那么创建一个模型类,并为其属性进行定义,例如:
@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....

在最终的视图控制器中,您可以访问这些属性以上传到Parse。

0

试一下。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接