我想知道如何在几个视图控制器之间共享一个 NSDictionary 对象,这些视图控制器基本上是我的应用程序中的选项卡。
我尝试使用一个协议,比如在 Java 中,这样我就可以转换为协议并访问该属性。这似乎行不通。
我还查看了 如何在多个视图控制器之间全局共享数据的类似问题
但我观察到 appDelegate 方法并不安全,可能会导致内存泄漏。
同样,将 A 类注入 B 类也会产生同样的问题。
那么任何人都可以建议我在我的代码中学习或实施的任何方法吗?
我想知道如何在几个视图控制器之间共享一个 NSDictionary 对象,这些视图控制器基本上是我的应用程序中的选项卡。
我尝试使用一个协议,比如在 Java 中,这样我就可以转换为协议并访问该属性。这似乎行不通。
我还查看了 如何在多个视图控制器之间全局共享数据的类似问题
但我观察到 appDelegate 方法并不安全,可能会导致内存泄漏。
同样,将 A 类注入 B 类也会产生同样的问题。
那么任何人都可以建议我在我的代码中学习或实施的任何方法吗?
您可以使用单例类来共享数据
检查这个单例类
MyManger.h
#import <foundation/Foundation.h>
@interface MyManager : NSObject {
NSMutableDictionary *_dict
}
@property (nonatomic, retain) NSMutableDictionary *dict;
+ (id)sharedManager;
@end
MyManger.m
#import "MyManager.h"
static MyManager *sharedMyManager = nil;
@implementation MyManager
@synthesize dict = _dict;
#pragma mark Singleton Methods
+ (id)sharedManager {
@synchronized(self) {
if(sharedMyManager == nil)
sharedMyManager = [[super allocWithZone:NULL] init];
}
return sharedMyManager;
}
- (id)init {
if (self = [super init]) {
dict = [[NSMutableDictionary alloc] init];
}
return self;
}
您可以像这样从任何地方访问您的字典
[MyManager sharedManager].dict
如果您只想共享字典,为什么不使用辅助类的类方法。
+(NSDictionary *)shareMethod
{
return dict;
}
我找到了出路。由于我希望共享字典,因此我在协议中声明了一个方法
- (void) setSingleHouse:(NSDictionary*) singleHouse;
在我的每个控制器中,我以适当的方式实现了该方法。因此,我现在能够与他们分享。
我还发现我之前以错误的方式进行了转换,即(@protocol(协议名称))。现在将其更改为 NSObject 。
抱歉大惊小怪。
我建议您不要在 appDelegate 实例中使用属性。这种模式不会提高代码的可重用性。
基本上,您共享的 NSDictionnary 是您的模型。因此,如果您希望您的代码遵循 MVC 设计部分,您应该创建一个具有共享实例的类,该实例将在公共属性中包含您的 NDDictionnary。
这样,您将通过以下方式访问共享的 NSDictionnary:
NSDictionary* sharedDictionnary = [MyModel sharedInstance].sharedDictionary;