【问题标题】:Object doesn't find method对象找不到方法
【发布时间】:2014-05-08 15:12:47
【问题描述】:

我目前正在阅读 Big Nerd Ranch 的《Objective C Programming》第 2 版一书,从一天开始我就一直在练习。

我有一个对象应该向一个方法发送消息,但我收到一个错误,即该方法的@interface 未声明。

BNRPortfolio.h:

#import <Foundation/Foundation.h>
@class BNRStockHolding;

@interface BNRPortfolio : NSObject

{
    NSMutableArray *_portfolios;
}

@property (nonatomic) double currentValue;

- (void)addStock:(BNRStockHolding *)s;

@end

BNRPortfolio.m:

#import "BNRPortfolio.h"
#import "BNRStockHolding.h"

@implementation BNRPortfolio

- (double)currentValue:(BNRStockHolding *)holding
{
    return [holding valueInDollars] - [holding costInDollars];
}

- (void)addStock:(BNRStockHolding *)s
{
    // Do we have an array?
    if (!_portfolios) {
        // If not, create one
        _portfolios = [[NSMutableArray alloc]init];
    }
    [_portfolios addObject:s];
}

@end

main.m:

#import <Foundation/Foundation.h>
#import "BNRStockHolding.h"
#import "BNRForeignStockHolding.h"
#import "BNRPortfolio.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        BNRStockHolding *holding1 = [[BNRStockHolding alloc] init];

        [holding1 setPurchaseSharePrice:2.30];
        [holding1 setCurrentSharePrice:4.50];
        [holding1 setNumberOfShares:40];
        [holding1 setNameOfHolding:@"holding1"];

        // Everything is good until here and already tested

        BNRPortfolio *portfolio = [[BNRPortfolio alloc] init];
        [portfolio addStock:holding1]; // Throws error of undefined declaration of addStock in    
                                       //BNRPortfolio
    }
    return 0;
}

为什么我可以创建对象,但对象找不到在其头文件中声明的方法?

提前致谢!

【问题讨论】:

  • 也看不到任何奇怪的问题。你确定 xCode 不是在捉弄你吗?尽管出现错误,您是否尝试过构建您的项目?
  • 您发布的代码没有任何问题,所以我怀疑任何人都可以提供帮助。
  • 尝试重启 Xcode。
  • 这太疯狂了。我以为我的大脑在捉弄我,而这里的某个人看到了我看不到的东西:-)。我可以在没有最后一行“[portfolio addStock:holding1]; 的情况下构建项目,但不是那样。重新启动也没有区别。结束哇,感谢您的快速响应!
  • P.S.如果该信息有帮助,则其他方法也无法访问

标签: objective-c


【解决方案1】:

项目文件夹中有两个同名的头文件,编译器使用的是旧的,其中没有声明方法。

Xcode 仅将添加到项目中的文件视为引用。但是,编译器看不到将哪些头文件添加到项目中,因为它不适用于单个头文件 - 它适用于头文件搜索路径(文件夹)。这意味着当它正在编译并且它正在寻找一个.h 文件时,它会递归地搜索文件夹直到找到它。如果有两个同名文件,它将使用找到的第一个。

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2020-01-06
    • 1970-01-01
    • 2014-03-22
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多