0

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

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

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

在 SingletonObject 的实现文件中,我有这个:

@synthesize 字典;

+(SingletonObject *) sharedManager { 静态 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。

任何人都可以帮忙吗?

4

2 回答 2

1

您必须在单例对象中实际创建字典,否则它将只是 nil. 您通常会在单例init方法中执行此操作。

- (id)init
{
    self = [super init];
    if (self) {
        dict = [NSMutableDictionary new];
    }
}
于 2013-02-19T06:10:03.693 回答
1
 @synchronized(self)
{
 if (!sharedResourcesObj)
  {
    sharedResourcesObj = [[SingletonObject alloc] init];

  }
}

 return sharedResourcesObj;
}

 - (id)init 
{
  if (self = [super init]) 
  {
    _dict = [NSMutableDictionary alloc]init];
   }
  return self;
}
于 2013-02-19T06:14:53.250 回答