在不使用PrepareForSegue的情况下在segue之间传递数据

时间:2015-08-07 11:54:44

标签: ios iphone swift parse-platform viewcontroller

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

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

如果我有1000个viewcontrollers,第一个viewcontroller信息将通过所有1000个viewcontrollers传递?为什么nº1000视图控制器不能获取留下的所有信息?例如:视图控制器n.50不需要有关viewcontrollernº1的信息......这是一个废话。

还有其他方法可以实现吗?

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

ParseClass [“Name”] = textfield.text

它向Parse发送信息,他们持有它直到我做类似SaveInBackground()的事情。

我正在尝试使用viewcontrollers找到这样的解决方案。每个viewcontroller都发送信息来解析并保存信息,直到Viewcontrollernº5上发生“saveinbackground()”。

可能?谢谢

3 个答案:

答案 0 :(得分:5)

是的,这是可能的。您可以使用<?xml version="1.0" encoding="UTF-8"?> <!--https://github.com/wildfly/wildfly-core/blob/master/server/src/main/resources/schema/jboss-deployment-structure-1_2.xsd--> <jboss-deployment-structure> <deployment> <exclude-subsystems> <subsystem name="logging"/> </exclude-subsystems> <exclusions> <module name="org.apache.commons.logging"/> <module name="org.apache.log4j"/> <module name="org.jboss.logging"/> <module name="org.jboss.logging.jul-to-slf4j-stub"/> <module name="org.jboss.logmanager"/> <module name="org.jboss.logmanager.log4j"/> <module name="org.slf4j"/> <module name="org.slf4j.impl"/> </exclusions> </deployment> 将信息存储到内存中,一旦存储,您就可以在项目的任何位置使用它。

就像你可以用这种方式存储价值:

NSUserDefaults

现在,您可以使用yourKey从任何位置检索此信息,如下所示:

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

你可以根据需要选择它。

有关详细信息,请阅读Apple Document for NSUserDefaults

使用let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey") Class,将值从一个视图传递到另一个视图而不使用segue的另一种方法。

您可以从Apple Documentation详细了解StructClasses

答案 1 :(得分:1)

如果我们的输入是有限的,请创建一个包含ex:

属性的模型类
@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....

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

答案 2 :(得分:0)

试试吧。

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