gpt4 book ai didi

ios - 无法将操作连接到 View Controller

转载 作者:行者123 更新时间:2023-11-29 12:45:29 25 4
gpt4 key购买 nike

我正在做 iOS Apprentice Bundle,我不是很好......

当“完成”按钮停止工作时,我正在学习教程。它附加到一个 IBAction,然后调用 self.delegate。我知道这是有效的,因为我添加了一个 NSLog 但是(在其目的地添加了一个 NSLog 之后)它从未到达。它的目的是将用户输入的数据添加到新的表格行中。

任何帮助都将非常感激!谢谢!

代码如下:

ListDetailViewControllerTableViewController.h

#import <UIKit/UIKit.h>

@class ListDetailViewController;
@class Checklist;

@protocol ListDetailViewControllerDelegate <NSObject>
- (void)listDetailViewControllerDidCancel:(ListDetailViewController *)controller;
- (void)listDetailViewController:(ListDetailViewController *)controller didFinishAddingChecklist:(Checklist *)checklist;
- (void)listDetailViewController:(ListDetailViewController *)controller didFinishEditingChecklist:(Checklist *)checklist;
@end

@interface ListDetailViewController : UITableViewController <UITextFieldDelegate>

@property (nonatomic, strong) IBOutlet UITextField *textField;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *doneBarButton;
@property (nonatomic, weak) id <ListDetailViewControllerDelegate> delegate;
@property (nonatomic, strong) Checklist *checklistToEdit;

- (IBAction)cancel;
- (IBAction)done;

@end

ListDetailViewControllerTableViewController.m

    - (IBAction)done
{

if (self.checklistToEdit == nil) {
Checklist *checklist = [[Checklist alloc] init];
checklist.name = self.textField.text;
[self.delegate listDetailViewController:self didFinishAddingChecklist:checklist];

} else {
self.checklistToEdit.name = self.textField.text;
[self.delegate listDetailViewController:self didFinishEditingChecklist:self.checklistToEdit];
}

NSLog(@"Hello, I'm a 'Done' log");

}

AllListsViewControllerTableViewController.m

- (void)listDetailViewController:(ListDetailViewController *)controller didFinishAddingChecklist:(Checklist *)checklist
{
NSLog(@"Adding Checklist");

controller.delegate = self;

NSUInteger newRowIndex = [self.dataModel.lists count];
[self.dataModel.lists addObject:checklist];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];

[self dismissViewControllerAnimated:YES completion:nil];

NSLog(@"finished adding checklist");
}

AllListsViewControllerTableViewController.h

#import <UIKit/UIKit.h>
#import "ListDetailViewControllerTableViewController.h"
#import "DataModel.h"

@interface AllListsViewController : UITableViewController <ListDetailViewControllerDelegate>

@property (nonatomic, strong) DataModel *dataModel;

@end

谢谢!

最佳答案

问题在于您设置委托(delegate)的位置——您不能在委托(delegate)协议(protocol)方法 (listDetailViewController:didFinishAddingChecklist:) 的实现中设置它,因为只有在委托(delegate)已设置时才会调用该方法。您需要在创建 ListDetailViewControllerTableViewController 类的实例时设置委托(delegate)。

关于ios - 无法将操作连接到 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com