0

デリゲートとプロトコルを使用して単純な TableView アプリケーションを作成しました。ios 5 では動作しましたが、xcode を更新すると、ios 6 では動作しません。コードは次のようになります。

子ビュー:

@class AddItemViewController;
@class CheckListItem;
@protocol AddItemViewControllerDelegate <NSObject>

- (void)addItemViewControllerDidCancel: (AddItemViewController *)controller;
- (void)addItemViewController:(AddItemViewController *)controller didFnishAddingItem:(CheckListItem *)item;

@end


@interface AddItemViewController : UITableViewController <UITextFieldDelegate>

//declare an property
@property (nonatomic, assign) id <AddItemViewControllerDelegate> delegate;

in childview.m:
- (void)addItemViewControllerDidCancel: (AddItemViewController *)controller{
//i do something here
}

in parentview.h:
#import "AddItemViewController.h"

@interface CheckListViewController : UITableViewController <AddItemViewControllerDelegate>

-(IBAction)addItem;

@end

in parentview.m:
- (void)addItemViewControllerDidCancel:(AddItemViewController *)controller
{
    [controller dismissViewControllerAnimated:YES completion:nil];

}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"AddItem"]){
        UINavigationController *navigationController = segue.destinationViewController;
        AddItemViewController *controller = (AddItemViewController *)navigationController;
        controller.delegate = self;
        NSLog(@"perform prepare for segue");

    }
}

このコードに何か問題がありますか? ありがとう

4

1 に答える 1

0

子ビューでは、メソッドを呼び出すだけでなく、[delegate addItemViewControllerDidCancel: (AddItemViewController *)controller] を呼び出す必要があります。

それを変更すると、うまくいくはずです:)

于 2013-01-02T08:26:28.363 に答える