0

JSONフィードからテーブルにデータを入力する次のステートメントがあります。テーブルから行を選択した後、元のコントローラーに戻して、API に再度クエリを実行し、いくつかのフィールドに入力します。

問題は、返される値が選択されたセルに関連していないことです。

ここに私のコードがあります。

詳細ビューコントローラーで

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    NSDictionary *addressdict = [jsonData objectAtIndex:indexPath.row];
    NSString *address = [addressdict objectForKey:@"StreetAddress"];
    idnumber = [addressdict objectForKey:@"Id"];
    cell.textLabel.text = address;
    cell.detailTextLabel.text = idnumber;
    return cell;
}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"sendAddress"])
    {
        // Get reference to the destination view controller
        SignUpViewController *controller = (SignUpViewController *)segue.destinationViewController;
        // Pass any objects to the view controller here, like...
        controller->idnumber = idnumber;
    }
}

私のマスターView Controllerでこれを行います

NSLog(@"The Address ID is: %@",idnumber);

しかし、それが返す値は正しくありません。

誰でも助けることができますか?

4

2 に答える 2

1

委任を使用して、データを以前の UIViewController に戻すことができます。

例えば

UIViewControllerB.h

// Declare a protocol that conforms to NSObject
@protocol UIViewControllerBDelegate <NSObject>

// @required is the default, but means that the delegate must implement the following methods
@required
- (void)viewController:(UIViewController)aViewController didSelectIDNumber:(NSNumber *)anIDNumber;

@end

UIViewControllerB.m

@interface UIViewControllerB : NSObject

// Keep a reference to the delegate so we can call the above methods
@property (weak, nonatomic) id<UIViewControllerBDelegate> delegate;

@end


@implementation UIViewControllerB

 - (NSNumber *)idNumberAtIndex:(int)anIndex
 {
    NSNumber *idNumber = nil;

    if (jsonData && anIndex <= [jsonData count])
    {
        NSDictionary *addressDictionary = jsonData[anIndex];

        idNumber = addressDictionary[@"Id"];
    }
    return idNumber;
 }

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     // When a row is selected let the delegate know the idNumber
     [self.delegate viewController:self didSelectIDNumber:[self idNumberAtIndex:indexPath.row]];
}

@end

UIViewControllerA.m

// Make UIViewControllerA conform the the UIViewControllerBDelegate
@implementation UIViewControllerA <UIViewControllerBDelegate>

// Implement the required UIViewControllerB Delegate Method
- (void)viewController:(UIViewController *)aViewController didSelectIDNumber:(NSNumber *)anIDNumber
{
    // do something with the id number
}
于 2013-11-06T22:34:14.023 に答える
0

これは絶対に間違っています。idnumber関数cellForRowAtIndexPath内の値を設定しようとしている場合、テーブルビューが表示する最後の値になります。

idnumbertableview メソッドで取得してみてくださいdidSelectRowAtIndexPath

于 2013-11-06T21:21:04.103 に答える