我想在几个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。
有人可以帮忙吗?
答案 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;
}