在iOS应用程序中传递用户信息的最佳方式?

时间:2014-07-14 14:51:12

标签: ios

我有一个iOS应用,需要保留用户特定的信息,并从应用程序的任何位置访问此信息。我的原始解决方案是将User对象传递给应用程序遍历的每个视图控制器,但我发现这个解决方案不够优雅和笨重。我想知道是否有更好的方法来保持整个应用程序的通用信息,请提前谢谢。

4 个答案:

答案 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];
}