gpt4 book ai didi

iphone - 委托(delegate)方法协议(protocol)不工作 - Objective-C

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:17 24 4
gpt4 key购买 nike

我正在为我的 iPad 开发一个 splitView 应用程序。我实现了一个名为 UploadUIButton。单击它时,UITableView 会出现在 UIPoverController 中。单击任何内容后,我想在 UIDetailView 中的 UIwebView 中显示一些相应的站点。为此,我实现了一个委托(delegate)方法协议(protocol)。我在 UploadTableViewController.h 文件中使用了以下代码行::

@protocol UploadTableViewDelegate <NSObject>
@required
- (void)selected:(NSString *)his;
@end


@interface UploadSpaceTableViewController : UITableViewController{
id<UploadSpaceTableViewDelegate> delegate;
}

@property (retain) id delegate;
@end

在相应的.m 文件中,我使用了以下代码行::

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if (delegate != nil) {
NSString *hisSelected = [keys objectAtIndex:indexPath.row];
NSLog(@"%@ lolwa", hisSelected);
[delegate selected:hisSelected];
}

}

在类的.m文件中,我实现了函数Selected,代码是::

- (void)selected:(NSString *)Key {    
NSLog(@"hello");
[self.UploadSpaceTableViewPopover dismissPopoverAnimated:YES];
}


-(IBAction)uploadpressed:(id)sender{
Upload.delegate = self;
self.Upload = [[UploadSpaceTableViewController alloc]
initWithStyle:UITableViewStylePlain];
self.UploadTableViewPopover = [[UIPopoverController alloc]
initWithContentViewController:UploadSpace];

[self.UploadTableViewPopover presentPopoverFromBarButtonItem:sender
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

但是,我无法在 gdb 中获取 hello(写入函数 Selected)NSLogged。这是我第一次使用此委托(delegate)方法协议(protocol)。我无法解决这个问题。有人可以帮我吗 ?谢谢和问候。

最佳答案

[delegate keySelected:hisKeySelected]; 是您的第一个问题。您没有声明名为 -keySelected: 的委托(delegate)方法,而是声明了名为 -Selected: 的委托(delegate)方法。

您的第二个问题是您绝对不是 TableView 的代表。为了调用像 -didSelectRowAtIndexPath: 这样的委托(delegate)方法,您必须是表的委托(delegate)。

PS,实例或方法名称不要以大写字母开头。在 ObjC 中,大写字母表示一个类。

编辑:这是您的 UploadSpaceTableViewController header 的样子:

@protocol UploadTableViewDelegate <NSObject>
@required
- (void)selected:(NSString *)his;
@end

@interface UploadSpaceTableViewController : UITableViewController<UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, assign) id <UploadSpaceTableViewDelegate>delegate; //delegates are weak!!!
@end

还有 .m,我会跳过很多不必要的东西:

-(void)viewDidLoad {
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
//other code

此外,您的委托(delegate)被声明为保留,这在 ObjC 中是绝对禁止的。如果使用 ARC,则声明是弱的,如果不是,则分配。

您还在您的 -uploadPressed: 方法中生成一个 nil 委托(delegate),方法是在您明确拥有或初始化该对象之前对其进行设置。它应该是这样的:

self.Upload = [[UploadSpaceTableViewController alloc]initWithStyle:UITableViewStylePlain];
Upload.delegate = self;

关于iphone - 委托(delegate)方法协议(protocol)不工作 - Objective-C ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240937/

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