0

Objective-C プログラミングと X-Code は初めてなので、ご容赦ください。Objective C に関する本からコードをコピーして電卓クラスを作成したところ、驚くほどうまく機能しています。次に、演習の一環として、変換ボタンを追加して分数を倍精度に変換して出力するように求められました。問題は、変換ボタンを押すとアプリが停止し、プログラムが SIGABRT シグナルを受信したというメッセージが表示されることです。

ボタンのコードは次のとおりです。

-(IBAction)clickConvert //convert method
{
if ( [myCalculator accumulator] != 0 ){
    displayString = [NSString stringWithFormat: @"%e", [myCalculator convertResult]];

    display.text = displayString;

    [displayString setString:@""];
}}

convertResult コード:

 -(double) convertResult 
{
double convertedFraction;
convertedFraction = [accumulator convertToNum];

return convertedFraction;
} 

(アキュムレータは、2 つのオペランドで行われた数学演算の値を含む Fraction オブジェクトです)

そして、ConverToNum 関数:

 -(double) convertToNum
{
if (denominator != 0)
    return (double) numerator/denominator;
else
    return NAN;
 }

アプリの他のすべては正常に動作するので、私が行ったことに問題があるに違いありません...誰か助けてもらえますか? 私は一日中オンラインで検索してきましたが、この SIGABRT エラーに関するまったく別の情報を読みました。ご協力ありがとうございました

4

1 に答える 1

3

displayStringが の場合、 setterNSStringはありません。setString文字列を に割り当てるだけdisplayStringです。

それ以外の

[displayString setString:@""]

行う:

displayString = @"";

編集:

あなたはそれdisplayStringNSMutableString. その場合、あなたの最初の割り当ては次のdisplayStringとおりです。

displayString = [NSString stringWithFormat: @"%e", [myCalculator convertResult]];

不変オブジェクトを displayString ポインターに割り当てます。コンパイラがそれについて不平を言っていない理由がわかりません。setString次に、 onを呼び出そうとすると、ポインタを であると宣言したにもかかわらずdisplayString、オブジェクトの実際の型はです。これを修正するには、次を試してください。NSStringNSMutableString

displayString = [[NSString stringWithFormat: @"%e", [myCalculator convertResult]] mutableCopy];

また:

[displayString setString:[NSString stringWithFormat: @"%e", [myCalculator convertResult]]];

また:

displayString = [NSMutableString stringWithFormat: @"%e", [myCalculator convertResult]];
于 2013-05-15T18:11:50.180 に答える