0

私は正常に動作するプログラムを持っていますが、main.m に NSLog ファイルがあっても印刷出力が得られません。何が問題なのか教えていただけますか? ありがとうございました。

main.m

#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 に答える