如何使用objective-c在xcode中使用共享偏好? [复制]
Posted
技术标签:
【中文标题】如何使用objective-c在xcode中使用共享偏好? [复制]【英文标题】:How to use shared preference in xcode using objective-c? [duplicate] 【发布时间】:2017-07-28 13:26:32 【问题描述】:在一个视图控制器中,我存储了一些数组值,然后我将从另一个视图控制器中获取该值。 如何在共享管理器中保存数组值以及如何从另一个视图控制器中检索该数组值?如何在 Xcode 中使用共享偏好?那可能吗?请帮我举个例子。谢谢。
我的代码是
(id)sharedManager
静态 AssistantView *sharedMyManager = nil;
静态 dispatch_once_t onceToken;
dispatch_once(&onceToken, ^ sharedMyManager = [[self alloc] init]; );
return sharedMyManager;
我把值放在了
[[AssistantView sharedManager]results]; // 结果是数组
【问题讨论】:
你应该检查一下:developer.apple.com/documentation/foundation/userdefaults 这是非常直接的解释。 @Stefan 在NSUserDefault
中存储数组不是一个好习惯
您可以在 AppDelegate 文件中声明全局变量并在不同的视图控制器之间共享。
他要求 ios 中的 Shared Preferences 相互性。我没有说这是一种好习惯。
【参考方案1】:
使用NSUserDefaults
设置
[[NSUserDefaults standardUserDefaults] setObject:@"Your Object" forKey:@"NameOfPreference"];
[[NSUserDefaults standardUserDefaults] synchronize];
获取
NSString *savedObject = [[NSUserDefaults standardUserDefaults]
stringForKey:@"NameOfPreference"];
// its Your Object
使用 AppDelegate 的替代方法
1 定义宏
#define APPDELEGATE ((AppDelegate *)[[UIApplication sharedApplication] delegate])
2 在 Appdelegate 中为对象添加属性
@property (nonatomic) NSArray *arrObjects;
3 将对象设置为属性。
APPDELEGATE.arrObjects = @[@"",@""];
4 获取价值
NSArray *globalObjects = APPDELEGATE.arrObjects
【讨论】:
【参考方案2】:你应该使用这样的单例类
#import <foundation/Foundation.h>
@interface MySingleton : NSObject
@property (nonatomic, retain) NSArray *mySharedArray;
+(id)sharedMySingleton;
@end
并在 .m 文件中
@implementation MySingleton
static MySingleton* _sharedMySingleton = nil;
+(id)sharedMySingleton
@synchronized([MySingleton class])
if (!_sharedMySingleton)
_sharedMySingleton = [[self alloc] init];
return _sharedMySingleton;
return nil;
并在任何 viewController 中调用它,例如
[[MySingleton sharedMySingleton] mySharedArray];
【讨论】:
我只是把我的值这样 [[AssistantView sharedManager]results];这里的结果是数组。我使用了这个,但我得到了这样的错误 Crash: -[AssistantView results]: unrecognized selector sent to instance 0x7fa5de047200【参考方案3】:1) 创建一个以 NSObject 作为子类的文件(即 SharedClass)
SharedClass.m
@implementation SharedClass
+ (instancetype)sharedManager
static SharedClass *sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
sharedManager = [[self alloc] init];
);
return sharedManager;
- (instancetype)init
if (self = [super init])
// alloc or set object here
return self;
SharedClass.h
#import <Foundation/Foundation.h>
@interface SharedClass : NSObject
+ (instancetype)sharedManager;
// your array
@end
2) 访问数组
[[SharedClass sharedManager]array];
3) 设置数组
[[SharedClass sharedManager]setArray];
【讨论】:
以上是关于如何使用objective-c在xcode中使用共享偏好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用 XCode 编译器在 Objective-C 源代码文件中定义“-DXXX”
如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它
在 XCode 中从 Objective-C 访问 JavaScript 变量
我如何知道 Xcode Objective-C 中的错误在哪里引发?