在不使用 PrepareForSegue 的情况下在 segue 之间传递数据
Passing data between segues without using PrepareForSegue
我正在使用故事板通过 5 个步骤创建用户设置帐户。每个步骤都有一个 ViewController:1º) 输入姓名、联系人等,2º) 导入照片,3º) 输入等 4º) 更多输入 5º) 确认页面,如果用户单击 "confirm" -> 获取所有输入并上传到 Parse。
当我在网上搜索这个时,我得到的唯一解决方案是创建一个函数 "Prepare for Segue" 并传递信息......但对我来说,这没有任何意义:
如果我有 1000 viewcontrollers,第一个 viewcontroller 信息将通过所有 1000 viewcontrollers 传递?为什么 n°1000 视图控制器不获取所有遗留的信息?例如:viewcontroller nº50 不需要有关 viewcontroller nº1 的信息...这是无稽之谈。
还有其他方法可以实现吗?
也许有一个解决方案,因为我正在使用 Parse,就像我做的那样:
解析类["Name"] = textfield.text
它向 Parse 发送信息并保存它直到我执行类似 SaveInBackground() 的操作。
我正在尝试使用 viewcontrollers 找到这样的解决方案。每个 viewcontroller 发送信息以解析并保存信息,直到 "saveinbackground()" 发生在 Viewcontroller n°5。
可能吗?谢谢
是的,这是可能的。您可以使用 NSUserDefaults
将您的信息存储到内存中,一旦存储,您就可以在项目的任何地方使用它。
就像您可以通过这种方式存储价值一样:
NSUserDefaults.standardUserDefaults().setObject(yourObject, forKey: "yourKey")
现在您可以使用您的密钥从任何地方检索此信息,如下所示:
let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")
您可以根据需要转换它的类型。
有关更多信息,请阅读 Apple Document for NSUserDefaults。
使用 Class
或 Struct
.
将值从一个视图传递到另一个视图而无需 segue 的另一种方法
您可以从 Apple Documentation 阅读更多关于 Classes
和 Structures
的信息。
试试吧。
let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")
NSUserDefaults.standardUserDefaults().synchronize()
如果我们的输入是有限的,请创建一个模型 class,其属性为 ex:
@interface UserDataInput : NSObject
@property (nonatomic)NSString *name;
@property (nonatomic)NSString *contactNumber;
....
blah blah bla
....
@end
然后做成单例class
@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....
在最终视图控制器中,您可以访问这些属性以上传以进行解析。
我正在使用故事板通过 5 个步骤创建用户设置帐户。每个步骤都有一个 ViewController:1º) 输入姓名、联系人等,2º) 导入照片,3º) 输入等 4º) 更多输入 5º) 确认页面,如果用户单击 "confirm" -> 获取所有输入并上传到 Parse。
当我在网上搜索这个时,我得到的唯一解决方案是创建一个函数 "Prepare for Segue" 并传递信息......但对我来说,这没有任何意义:
如果我有 1000 viewcontrollers,第一个 viewcontroller 信息将通过所有 1000 viewcontrollers 传递?为什么 n°1000 视图控制器不获取所有遗留的信息?例如:viewcontroller nº50 不需要有关 viewcontroller nº1 的信息...这是无稽之谈。
还有其他方法可以实现吗?
也许有一个解决方案,因为我正在使用 Parse,就像我做的那样:
解析类["Name"] = textfield.text
它向 Parse 发送信息并保存它直到我执行类似 SaveInBackground() 的操作。
我正在尝试使用 viewcontrollers 找到这样的解决方案。每个 viewcontroller 发送信息以解析并保存信息,直到 "saveinbackground()" 发生在 Viewcontroller n°5。
可能吗?谢谢
是的,这是可能的。您可以使用 NSUserDefaults
将您的信息存储到内存中,一旦存储,您就可以在项目的任何地方使用它。
就像您可以通过这种方式存储价值一样:
NSUserDefaults.standardUserDefaults().setObject(yourObject, forKey: "yourKey")
现在您可以使用您的密钥从任何地方检索此信息,如下所示:
let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")
您可以根据需要转换它的类型。
有关更多信息,请阅读 Apple Document for NSUserDefaults。
使用 Class
或 Struct
.
您可以从 Apple Documentation 阅读更多关于 Classes
和 Structures
的信息。
试试吧。
let yourInstance = NSUserDefaults.standardUserDefaults().objectForKey("yourKey")
NSUserDefaults.standardUserDefaults().synchronize()
如果我们的输入是有限的,请创建一个模型 class,其属性为 ex:
@interface UserDataInput : NSObject
@property (nonatomic)NSString *name;
@property (nonatomic)NSString *contactNumber;
....
blah blah bla
....
@end
然后做成单例class
@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....
在最终视图控制器中,您可以访问这些属性以上传以进行解析。