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*)name {

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];

}

みんなありがとう!

4

2 に答える 2

0

まず、NSString を割り当てる必要はありません。なぜなら、valueForKey から別のものを取得するからです。

次に、より良いコードを取得したいことを正しく理解していれば、NSPredicateまたはブロックベースのindexOfObjectPassingTest. どちらも配列全体を反復し、要素に対してテストを実行して、一致する要素 (またはそれらのインデックス) を取得します。

于 2012-11-27T12:37:44.687 に答える
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>"]);

(たとえば) 0 ではなく、NSNotFound の検索に失敗したかどうかをテストしていることを確認してください。

于 2012-11-27T13:06:24.147 に答える