2011-07-21 128 views
0

新手這裏,使用嵌套的NSDictionary與選擇器

我有一個單一的部件拾取器從一個plist中設置,每一個項目是一個數組,與該應用程序使用的每個陣列中的多個字符串。

目前的plist結構是這樣的:

NSDictionary -> NSArray -> NSString 
        |    | 
      Items in Picker  Data for each Item 

但現在,我想:

NSDictionary -> NSDictionary -> NSArray -> NSString 
         |    |    | 
    DIfferent Picker Data Sets  Items in Picker Data for each Item 

所以現在會有多組選擇器組件的,我會出在使用分段控制等...

我甚至不知道這是否可能,我只是希望它能讓我從製造許多不同的單獨的控制器中解脫出來。

發生了什麼我難倒纔剛剛一切正常攝入

這是我現在,它成功地建立,但崩潰(以下調試信息):

NSBundle *bundle = [NSBundle mainBundle]; 

NSString *plistPath = [bundle pathForResource:@"CamerasDatabase" ofType:@"plist"]; 

NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 
self.allCameras = dictionary; 
[dictionary release]; 

NSArray *cameraTypes = [self.allCameras allKeys]; 
self.CamTypes = cameraTypes; 

NSArray *items = [self.CamTypes objectAtIndex:0]; 
self.Cameras = items; 

NSString *selectedCamera = [self.Cameras objectAtIndex:0]; 
NSArray *array = [CamsList objectForKey:selectedCam]; 
self.cameraData = array; 

我已經嘗試了許多不同的組合字典,數組和字符串,所以我敢肯定上面的代碼搞砸了。

它崩潰的:

NSString *selectedCamera = [self.Cameras objectAtIndex:0]; 

以 「 - [NSCFString objectAtIndex:]:無法識別的選擇發送到實例0x4e127f0」

回答

0

很明顯,你有自我NSString對象(鍵)。 CamTypes。不是NSArray。

所以這些線是用於固定該寫代碼的一些這樣的事

NSBundle *bundle = [NSBundle mainBundle]; 

NSString *plistPath = [bundle pathForResource:@"CamerasDatabase" ofType:@"plist"]; 

NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 
self.allCameras = [dictionary valueForKey:@"Key "];//Key for accesing your inner dictionary 
[dictionary release]; 



NSArray *cameraTypes = [self.allCameras allKeys]; 
self.CamTypes = cameraTypes; 


NSArray *items = [self.allCameras valueForKey:[self.CamTypes objectAtIndex:0]]; 
self.Cameras = items; 

NSString *selectedCamera = [self.Cameras objectAtIndex:0]; 
NSArray *array = [CamsList objectForKey:selectedCam]; 
self.cameraData = array; 

所以在上面的代碼中self.allCameras無效

NSArray *items = [self.CamTypes objectAtIndex:0]; 
self.Cameras = items; 

NSString *selectedCamera = [self.Cameras objectAtIndex:0]; //this line is cause of exception. 

是具有對應不同的鍵陣列(cameraTypes字典這是在self.CamTypes)。

+0

這很棒!謝謝 - 我剛剛對所有的字典數組和字符串都感到困惑,但是現在它很有意義 – REDMX

+0

@REDMX,你需要接受這個答案。 – Ishu