1

IOS 6 用のアプリの作成 - ボタンをタップすると新しい modalViewController が表示される mainViewController があります。その modalViewController には tableView があります。ユーザーがセルをタップすると、そのセルの値を取得して、mainViewController の変数に割り当てます。

問題は、viewDidAppear メソッドで出力すると常に NULL になることです。

これは modalViewController のデリゲート メソッドです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    NSMutableString *event_id = [[self.events valueForKey:@"event_id"] objectAtIndex:indexPath.row];
    NSLog(@"EVENT ID = %@", event_id); //This gives me actuall ID


    [self.presentingViewController dismissViewControllerAnimated:YES completion:^{
        [self.mainViewController setEventID:event_id];
    }];
}

表示される場合は、完了ブロックを使用して設定します。私のmainViewControllerには、eventIDのプロパティがあります。私のmodalViewControllerにもあります

@class MainViewController

@interface ModalViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
    IBOutlet UITableView *eventsTable;
}

@property (strong, nonatomic) MainViewController *mainViewController;

@end

何らかの理由で、viewDidAppear で出力しようとすると eventID が常に NULL になりますが、最初に設定したときに出力されます。私はそこに何が欠けていますか??

どんな助けでも大歓迎です。

編集:

私の MainViewController には、次のように設定された他のデリゲートが既にあります。

@interface MainViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UIAlertViewDelegate, CLLocationManagerDelegate>

プロトコル デリゲート アプローチを使用して、ModalViewControllerDelegate のようにカスタム デリゲート宣言をそこに追加するにはどうすればよいでしょうか。

4

2 に答える 2

1

プロトコル/デリゲートを ModalViewController に追加し、それを使用して、そのデリゲートをサブスクライブすることで MainViewController と通信します。次のようなもの。(テストされていませんが、アイデアが得られます)。モーダル ビューをそのように表示するときは、必ずデリゲートを設定してください。

それでも問題が解決しない場合は、このリンクを調べてください

ModalViewController *modal = (ModalViewController *)[[ModalViewController alloc]init];
modal.delegate = self;
[self presentModalViewController: modal animated:YES];

ModalViewController.h

@protocol ModalViewControllerDelegate <NSObject>
-(void)setEventID:(id)event_ID;
@end

@property (nonatomic, weak) id<ModalViewControllerDelegate> delegate;

ModalViewController.m

[_delegate setEventID:event_ID];

MainViewController.h

#import "ModalViewController.h"

MainViewController @interface ModalViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, ModalViewControllerDelegate>

MainViewController.m

-(void)setEventID:(id)event_id
{
    [self setEventID:event_id];
}
于 2013-06-29T01:09:20.663 に答える
0

これを試して:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    NSMutableString *event_id = [[self.events valueForKey:@"event_id"] objectAtIndex:indexPath.row];
    NSLog(@"EVENT ID = %@", event_id); //This gives me actuall ID

    [self.mainViewController setEventID:event_id];
    [self.presentingViewController dismissViewControllerAnimated:YES completion:^{

    }];
}
于 2013-06-29T06:03:01.077 に答える