0

私はUIpickerで少し立ち往生しています。これが私のJSONデータです:

{
    "contact_id": [
        "455",
        "464"
    ],
    "contact_name": [
        "Administrator",
        "Main contact"
    ]
}

データをNSdictionaryに保存し、オブジェクトに変換した後、連絡先を保存するNSarrayを作成しました。私のViewcontroller.mには次のものがあります:JSONを使用したオブジェクトとキーを持つUIPicker

// Creating an URL object
NSURL *url = [NSURL URLWithString:@"http://web.com/json.php"];    
//Creating the data object that will hold the content of the URL
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
contactlist = [result objectForKey:@"contact_name"];

連絡先リストを使用して、連絡先の値をドロップダウンに表示できます。これが私の他の代表者です

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
         return 1;
}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
        return [contactlist count];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
         return [contactlist objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component{
contactTextField.text = (NSString *)[contactlist objectAtIndex:row];
}

選択した連絡先の対応するIDをJSONPOSTリクエストで送信したいと思います。

たとえば、contact_nameを選択した場合Administrator、そのcontact_idを取得したい455 メソッドを作成しました

- (IBAction)SendMessage:(id)sender ;

サーバーサイドスクリプトに送信する前にJSONデータを作成します。ここで、連絡先名ではなくIDを渡す必要があります。

// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"603",  @"contact",nil];

問題を解決するためにこのアレイを作成しましたが、動作させることができませんでした。

contactid = [result objectForKey:@"contact_id"];
4

2 に答える 2

2

OK、あなたが質問していることを理解していると思います。おそらくこれにはいくつかの解決策があります。しかし、私はちょうど私に入ったものを渡します。

idの配列が名前と同じ順序である場合は、新しい配列を作成するだけです

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

NSArray* ids = (NSArray*)[result objectForKey:@"contact_id"];

そして、メソッドで:

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component{}

対応するIDを取得するには、次の手順を実行します。

NSString *idSentToServer = (NSString *)[ids objectAtIndex:row];
于 2013-02-20T01:12:48.703 に答える
0

あなたのケースでJSONがそのように定義した方法が可能かもしれないことを私は理解しています。JSONデータはJSONオブジェクトの配列を返す必要がありますか?

次のように:

[{"contact_id":"455","contact_name":"Administrator"},{"contact_id":"464","contact_name":"Main contact"}]
于 2013-02-20T01:33:35.687 に答える