2013-02-19 1 views
0

Я хочу поделиться NSMutableDictionary между несколькими UITableViews. Дело в том, что в одном представлении я могу добавить массив как значение и соответствующий ключ в словарь, а затем установить свойство словаря SingletonObject. Затем в другом представлении я могу получить доступ к массиву в словаре через свойство SingletonObject.Возможно ли иметь NSMutableDictionary как свойство SingletonObject?

Для SingletonObject, в заголовочном файле, у меня есть это:

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

В файле реализации для SingletonObject у меня есть это:

@synthesize Dict;

+ (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.

Может ли кто-нибудь помочь?

+1

Вы не создаете словарь –

ответ

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

    } 
} 

return sharedResourcesObj; 
} 

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

Где я могу поместить метод init? – Zolt

+0

В вашем одиночном классе –

+0

[Проверить это] (http: // stackoverflow.com/questions/14831505/create-nsmutabledictionary-that-will-be-available-from-around-in-the-app/14831554 # 14831554) –

1

Вы должны на самом деле создать словарь в вашем объекте singleton, иначе это будет только nil. Обычно вы делаете это в методе singleton init.

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

Это своего рода, что я предполагаю, что проблема может быть, но не был уверен, или что делать ... Что вы имеете в виду метод инициализации? Куда бы я вложил это в файл реализации SingletonObject после метода + (SingletonObject *) sharedManager {}? – Zolt

+0

Вы хотите сказать, что это метод моего стиля UITabableView - (id) initWithStyle: (UITableViewStyle)? – Zolt

+0

Или в ViewDidLoad? – Zolt