2012-11-27 44 views
1

是否有可能按名稱檢查數組中的對象。 在我的應用程序的某個時候,我需要訪問plist,並將信息存儲在我名下找到的對象下。 我需要這樣做的原因是因爲我沒有在該數組中放置對象的整數。按名稱搜索數組中的對象

我已經開始通常的程序,但我沒有得到任何地方。也許它剛開始有點爲時已晚,我....

這是我的plist外觀

Array 
Dictionary 
     title ... 
     text ... 
     ect ... 
Dictionary 
     title ... 
     text ... 
     ect ... 
    Dictionary 
     title ... 
     text ... 
     ect ... 

到目前爲止我的代碼是沒有幫助的。我肯定做錯了什麼。

-(NSString*)nameFromPlist:(NSString*)name { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Orte.plist"]; 
_regionArray = [NSArray arrayWithContentsOfFile:writableDBPath]; 

NSString *string = [[NSString alloc]init]; 

for(NSDictionary *dict in _regionArray) { 
    string = [[dict objectForKey:name] valueForKey:@"title"]; 

} 

return [NSString stringWithFormat:@"%@",string]; 

}

我的字符串就是返回null。

任何想法的人? 非常感謝!

答:

下面是爲大家代碼:

- (的NSString *)nameFromPlist:(的NSString *)名稱{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *tmpFileName = [[NSString alloc] initWithFormat:@"Orte.plist"]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:tmpFileName]; 

NSString *string; 
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:path]; 

NSDictionary *dict = [[NSDictionary alloc] init]; 
NSString *title; 
for (int i=0; i<[array count]; i++) { 
    dict = [array objectAtIndex:i]; 
    title = [dict valueForKey:@"title"]; 

    if([title isEqualToString:name]) { 
     string = [dict valueForKey:@"title"]; 
     NSLog(@"Titel: %@", string); 
    }   
} 

return [NSString stringWithFormat:@"%@",string]; 

}

感謝一個大家都不少!

+2

您應該添加一個標籤的代碼的語言,那麼你有更好的機會,你的問題得到解答。 – Kai

+0

有以下幾種可能的結果:你的'_regionArray'可能是'nil';同樣,在每次迭代中,您都會丟棄'string'的前一個值,並將其替換爲可能爲'nil'的新值。使用調試器在執行期間找出變量的實際值。 – waldrumpus

回答

0

首先你不需要分配NSString,因爲你會從valueForKey中獲得一個不同的值。

然後,如果我理解正確,你想得到更好的代碼可能是使用NSPredicate或基於塊的indexOfObjectPassingTest。兩者都遍歷數組並對元素執行測試以獲取匹配的元素(或它們的索引)。

+0

謝謝大家。我終於弄明白了。我把代碼放到原來的問題中! – freshking

+0

太棒了!不過,我建議你看看更高效的NSPredicates或基於塊的API :) –

0
NSString* plistPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"<PlistFileName>" ofType:@"plist"]; 
NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath]; 
NSMutableArray* titles = [[NSMutableArray alloc] init]; 
for (NSDictionary* d in array) 
    [titles addObject:[d objectForKey:@"title"]]; 
NSLog(@"Object found at index %i", [a indexOfObject:@"<Your object name>"]); 

確保您對NSNotFound測試故障定位,而不是(說)0