0

我有一个运行良好的程序,但即使我在 main.m 中有一个 NSLog 文件,我也没有打印输出。你能告诉我有什么问题吗?谢谢你。

主文件

#import <Foundation/Foundation.h>
#import "Stockholding.h"

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

  @autoreleasepool {

    StockHolding *stockA;
    StockHolding *stockB;
    StockHolding *stockC;

    [stockA setPurchaseSharePrice:2.40];
    [stockA setCurrentSharePrice:3.12];
    [stockA setNumberOfShares:40];

    [stockB setPurchaseSharePrice:1.50];
    [stockB setCurrentSharePrice:1.41];
    [stockC setNumberOfShares:35];

    [stockC setPurchaseSharePrice:1.10];
    [stockC setCurrentSharePrice:1.20];
    [stockC setNumberOfShares:60];


    NSArray *holdings = [NSArray arrayWithObjects:stockA, stockB, stockC, nil];

    for (StockHolding *n in holdings) {
      // Call the methods
      float cost = [n costInDollars];
      float value = [n valueInDollars];
      NSLog(@"Bought stock for $%.2f, It is now at $%.2f, I have %d shares, They cost me $%.2f, Now they are worth $%.2f", [n purchaseSharePrice], [n currentSharePrice], [n numberOfShares], cost, value);
    }
  }
    return 0;
}

StockHolding.h

#import <Foundation/Foundation.h>

@interface StockHolding : NSObject {
  float purchaseSharePrice;
  float currentSharePrice;
  int numberOfShares;
}

@property float purchaseSharePrice;
@property float currentSharePrice;
@property int numberOfShares;

-(float)costInDollars;
-(float)valueInDollars;

@end

StockHolding.m

#import "StockHolding.h"

@implementation StockHolding

@synthesize purchaseSharePrice, currentSharePrice, numberOfShares;

-(float)costInDollars
{
  return (purchaseSharePrice * numberOfShares);
}

-(float)valueInDollars
{
  return (currentSharePrice * numberOfShares);
}

@end
4

1 回答 1

2

您实际上还没有创建任何这些StockHolding对象。因此,您的数组为空,并且循环不执行任何操作。

StockHolding *stockA;

只是一个指针的声明。您需要创建它指向的对象;通常的程序是这样的:

StockHolding *stockA = [[StockHolding alloc] init];

由于在 ARC 下,对象指针被初始化为nil(这意味着“无对象”),因此您将nil作为所有参数传递给arrayWithObjects:. nil作为哨兵值,意思是“没有更多参数”,创建的数组没有内容。

对于一个空数组,for (StockHolding *n in holdings)没有任何东西可以枚举,所以循环体中的任何代码,包括你的NSLog(),都不会被执行。

于 2012-07-11T17:27:08.590 回答