gpt4 book ai didi

iphone - 在 'splitViewBarButtonItem' 类型的对象上找不到属性 'id'

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

我正在学习 Stanford cs193p lesson 7 关于使用 SplitViewControllers 和协议(protocol)的内容。我正在做与教授正在做的完全相同的事情(多次检查),但我一遍又一遍地遇到这个错误。

我在 SplitViewBarButtonItemPresenter.h 中定义了一个协议(protocol)

#import <UIKit/UIKit.h>

@protocol SplitViewBarButtonItemPresenter <NSObject>
@property (nonatomic,strong) UIBarButtonItem *splitViewBarButtonItem;
@end

在我的主 CalculatorViewController.h 中

@interface CalculatorViewController : UIViewController <UISplitViewControllerDelegate>

在 CalculatorViewController.m 中

-(id <UISplitViewControllerDelegate>)splitViewBarButtonItemPresenter
{
id detailVC = [self.splitViewController.viewControllers lastObject];
if(![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]){
detailVC = nil;
}
return detailVC;
}

- (void)awakeFromNib
{
[super awakeFromNib];
super.splitViewController.delegate = self;
}

稍后当我尝试设置 barButtonItem 时

-(void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = self.title;
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}

我一直在标题中收到错误,就好像我没有正确声明协议(protocol)和委托(delegate)一样。我真的不知道还能在哪里寻找错误,因为我正在逐行逐字逐句地关注斯坦福教授所做的事情。错误在这一行,具体是:

[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;

最佳答案

首先,你的代码中有一个无限递归:

-(id <UISplitViewControllerDelegate>)splitViewBarButtonItemPresenter
{
id detailVC = [self.splitViewController.viewControllers lastObject];
if(![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]){
detailVC = nil;
}
return [self splitViewBarButtonItemPresenter] ? UIInterfaceOrientationIsPortrait(UIInterfaceOrientation) : NO;
}

该方法在返回语句中调用自身,并且没有中止条件。其次,即使该方法会返回一个值,它也会返回一个 BOOL。但它应该返回 id<UISplitViewControllerDelegate> .

第三,要么是方法的返回类型错误,要么是名字有误导性。您有一个名为 SplitViewBarButtonItemPresenter 的协议(protocol)方法的名称是 splitViewBarButtonItemPresenter .所以从名字我希望它返回一个 id<SplitViewBarButtonItemPresenter>不是id<UISplitViewControllerDelegate> .

最后但同样重要的是,你的 SplitViewBarButtonItemPresenter CalculatorViewController 未实现协议(protocol).

所以您的代码存在很多问题,我建议您更频繁地检查一下。

关于iphone - 在 'splitViewBarButtonItem' 类型的对象上找不到属性 'id<UISplitViewControllerDelegate>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306660/

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