3

クラスの操作に問題があります。NSObject のサブクラスである「StockHolding」オブジェクトを作成する必要があります。インスタンス変数とメソッドを作成します。次に、名前と価格を含む株式保有の 3 つの反復を作成し、それらを変更可能な配列に読み込みます。配列内のオブジェクトをすばやく列挙し、それぞれのプロパティ (価格) を出力するのが困難です。問題は、オブジェクトを列挙してプロパティを出力しようとするとエラーが発生することです。私は運がない問題を解決するいくつかの異なる方法を試しました。何か案は?また、 currentStock が名前ではなくポインターの位置を出力していることにも気付きました。おそらく、これらの問題は関連しています。前もって感謝します。

'ヘッダ'

#import <Foundation/Foundation.h>

@interface StockHolding : NSObject
{
    float fPurchaseSharePrice; 
    float fCurrentSharePrice; 
    int iNumberOfShares;
}

@property float fPurchaseSharePrice;
@property float fCurrentSharePrice;
@property int iNumberOfShares;

-(float) fCostInDollars; //fPurchaseSharePrice * fNumberOfShares
-(float) fValueInDollars; //fCurrentSharePrice * fNumberOfShares

@end

'実装'

#import "StockHolding.h"

@implementation StockHolding

@synthesize fCurrentSharePrice, fPurchaseSharePrice, iNumberOfShares;

-(float)fCostInDollars; //fPurchaseSharePrice * iNumberOfShares
{    
    return (fPurchaseSharePrice * iNumberOfShares);
}

-(float)fValueInDollars; //fCurrentSharePrice * iNumberOfShares
{
    return (fCurrentSharePrice * iNumberOfShares);
}

@end

'主要'

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

@autoreleasepool {
    StockHolding *Apple = [[StockHolding alloc] init];
    [Apple setFPurchaseSharePrice:225];
    [Apple setFCurrentSharePrice:300];
    [Apple setINumberOfShares:50];

    StockHolding *Cisco = [[StockHolding alloc] init];
    [Cisco setFPurchaseSharePrice:100];
    [Cisco setFCurrentSharePrice:50];
    [Cisco setINumberOfShares:75];

    StockHolding *WalMart = [[StockHolding alloc] init];
    [WalMart setFPurchaseSharePrice:75];
    [WalMart setFCurrentSharePrice:150];
    [WalMart setINumberOfShares:75];

    NSMutableArray *Portfolio = [NSArray arrayWithObjects: Apple, Cisco, WalMart, nil];

    for (NSObject *currentStock in Portfolio){   
        NSLog(@"Purchase Price: %@", currentStock );
        NSLog(@"Details: %f", [currentStock FPurchaseSharePrice]);  //  <---Error is on this line.  It says "No visible @interface for NSObject declares the selector fPurchaseSharePrice"
    }

}
return 0;
}
4

3 に答える 3

2

代わりに for ループに対してこれを行います

for (StockHolding *currentStock in Portfolio){   
    NSLog(@"Purchase Price: %@", currentStock );
    NSLog(@"Details: %f", [currentStock fPurchaseSharePrice]);  //  <---Error is on this line.  It says "No visible @interface for NSObject declares the selector fPurchaseSharePrice"
}
于 2012-08-27T21:18:30.647 に答える
0

それが言うように、その名前のメソッドはありません。Objective-C ではメソッド名の大文字と小文字が区別され、プロパティ (および対応するアクセサー) を として宣言しましたfPurchaseSharePrice。これを使用したい:

NSLog(@"Details: %f", [currentStock fPurchaseSharePrice]);
于 2012-08-27T21:18:45.047 に答える
0

あなたの NSLog:FPurchaseSharePriceである必要がありますfPurchaseSharePrice

さらに、-(NSString *)description をオーバーライドすると、オブジェクトを出力すると、現在表示されているオブジェクトのポインターではなく、その文字列が生成されます。

- (NSString *)description
{
    return [NSString stringWithFormat:@"StockHolding: %.2f, %.2f", self.fCostInDollars, self.fValueInDollars];
}

収量:

Purchase Price: StockHolding: 11250.00, 15000.00

それよりも:

Purchase Price: <StockHolding: 0x7fe438c0a480>

最後に、 for ループでキャストするのではなくNSObject、次のことができます。

for (StockHolding *currentStock in Portfolio)

そして、応答しない可能性があるというエラーはなくなります。

于 2012-08-27T21:17:25.330 に答える