是否可以将NSMutableDictionary作为SingletonObject的属性?

时间:2013-02-19 06:06:09

标签: objective-c singleton nsmutabledictionary

我想在几个UITableViews之间共享一个NSMutableDictionary。关键在于,在一个视图中,我可以添加一个数组作为值和字典的相应键,然后设置SingletonObject的字典属性。然后在另一个视图中,我可以通过SingletonObject的属性访问字典中的数组。

对于SingletonObject,在头文件中,我有:

@property(nonatomic) NSMutableDictionary * dict;
+(SingletonObject *) sharedManager;

在SingletonObject的实现文件中我有:

@synthesize dict;

+(SingletonObject *)sharedManager {     static SingletonObject * sharedResourcesObj = nil;

@synchronized(self)
{
    if (!sharedResourcesObj)
    {
        sharedResourcesObj = [[SingletonObject alloc] init];
    }
}

return sharedResourcesObj;

}

然后我在我的一个UITTableView类中执行以下操作

        // instantiate the SingletonObject
        sharedResourcesObj = [SingletonObject sharedManager];

        // instantiate array
        NSMutableArray *courseDetails = courseDetails = [[NSMutableArray alloc]init];
        // put textview value into temp string
        NSString *tempString = tempString = [[NSString alloc]initWithString:[_txtBuildingRoom text]];

        // put textview value into array (via temp string)
        [courseDetails addObject:tempString];

        // set dictionary property of SingletonObject
        [sharedResourcesObj.dict setObject:courseDetails forKey:_lblCourse.text];

问题在于,当我将所有内容逐行打印到控制台时,所有内容都有值并且工作正常,除了字典的新值不存在。

当我使用下面的代码检查字典的值或计数时,计数为0并且字典中没有对象。

        // dictionary count
        NSLog(@"%i", sharedResourcesObj.dict.count);

        // get from dictionary
        NSMutableArray *array = [sharedResourcesObj.dict objectForKey:_lblCourse.text];

        // display what is in dictionary
        for (id obj in array)
        {
            NSLog(@"obj: %@", obj);
        }

我使用正确的概念在UITableViews之间共享字典?

我的SingletonObject的实现有问题吗?

我之前使用过SingletonObject的这个实现来在选项卡之间共享整数值,并且绝对没有问题。现在唯一的区别是SingletonObject的属性不是整数,而是NSMutableDictionary。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你必须在你的单例对象中实际创建字典,否则它只是nil。你通常用单身人士的init方法做到这一点。

- (id)init
{
    self = [super init];
    if (self) {
        dict = [NSMutableDictionary new];
    }
}

答案 1 :(得分:1)

 @synchronized(self)
{
 if (!sharedResourcesObj)
  {
    sharedResourcesObj = [[SingletonObject alloc] init];

  }
}

 return sharedResourcesObj;
}

 - (id)init 
{
  if (self = [super init]) 
  {
    _dict = [NSMutableDictionary alloc]init];
   }
  return self;
}