我有一个iOS应用,需要保留用户特定的信息,并从应用程序的任何位置访问此信息。我的原始解决方案是将User对象传递给应用程序遍历的每个视图控制器,但我发现这个解决方案不够优雅和笨重。我想知道是否有更好的方法来保持整个应用程序的通用信息,请提前谢谢。
答案 0 :(得分:1)
使用单例类。这可以从任何其他类调用。
MyUser.H
#import <foundation/Foundation.h>
@interface MyUser : NSObject {
NSString *someProperty;
}
@property (nonatomic, retain) NSString *someProperty;
+ (id)sharedUser;
@end
MyUser.m
#import "MyUser.h"
@implementation MyUser
@synthesize someProperty;
#pragma mark Singleton Methods
+ (id)sharedUser {
static MyUser *sharedMyUser = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyUser = [[self alloc] init];
});
return sharedMyUser;
}
- (id)init {
if (self = [super init]) {
someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
}
return self;
}
- (void)dealloc {
// Should never be called, but just here for clarity really.
}
@end
然后你可以通过调用以下函数从任何地方引用单例:
MyUser *sharedUser = [MyUser sharedUser];
当然,你可以使用 NSUserDefaults 来填充单例,甚至用它来保存状态。
享受!
答案 1 :(得分:1)
对于少量数据,我建议使用NSUserDefaults。它可以像字典一样使用,您可以在其中设置键的值,稍后在应用程序的任何位置检索这些值。
对于大量数据,核心数据可能是最佳解决方案。您可以拥有一个名为User的实体,它存储用户的所有数据。
如果您是RayWenderlich.com的订阅者,那么有7个关于数据存储的精彩视频教程。他们谈论NSData,文件管理器,Plists,编码和解码对象,NSUserDefaults,XML和JSON,它们应该满足您的大多数需求。他们还将在今年秋季推出Core Data by Tutorials一书,并且已经在网站上提供了有关Core Data的教程。
答案 2 :(得分:1)
您可以向应用程序委托添加属性以存储User
对象。然后,您可以使用[UIApplication sharedApplication]
。
答案 3 :(得分:0)
只需发送以下通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:yourInformation];
并且在您需要的每个班级中都可以获得信息:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workWithInformation:) name:@"notificationName" object:nil];
在此方法中使用您的信息制作所有内容
- (void)workWithInformation:(NSNotification *)notification {
id info = [notification yourInformation];
}