1

私はRPN電卓に取り組んでいる初心者で、文字列/値のペアを格納するために2つのメンバー配列の配列を設定しようとしています。これにより、後でそれらを使用して、押された数字/演算子の完全なシーケンスを表示できますユーザーが今どこにいてもアクセスできます。問題は、私が間違っていたとしても、配列が作成されないことを意味します。これを修正する方法について何か考えはありますか?

これが私のコードです(oneStringValuePairそしてarrayOfStringValuePairs、.hで宣言され(nonatomic, strong)、.mで合成されたNSMutableArrayです):

NSLog(@"result is float: %f",result);

self.formattedNumber = [NSString stringWithFormat:@"( %@%@%@ )",firstNumber,operation,secondNumber];

NSLog(@"String is %@",self.formattedNumber);

NSMutableArray *pair = self.oneStringValuePair;
NSMutableArray *array = self.arrayOfStringValuePairs;

pair = [pair init];
array = [array init];

if(pair==nil)
{
    NSLog(@"pair is nil.");
}

if (array==nil)
{
    NSLog(@"array is nil.");
}

[pair addObject:self.formattedNumber];

NSLog(@"first array element description: %@", [[pair lastObject] description]);
[pair addObject:[NSNumber numberWithFloat:result]];

NSLog(@"second array element description: %@",[[pair lastObject] description]);
NSLog(@"pair count: %@",self.oneStringValuePair.count);

if (self.arrayOfStringValuePairs)
{
    [array addObject:pair];
}

NSLog(@"count of pairs:  %@",array.count);

の NSLog は次のとおりです5 3 + 6 /

2012-08-04 08:02:54.550 Calculator[83891:f803] result is float: 8.000000
2012-08-04 08:02:54.552 Calculator[83891:f803] String is ( 3+5 )
2012-08-04 08:02:54.552 Calculator[83891:f803] pair is nil.
2012-08-04 08:02:54.553 Calculator[83891:f803] array is nil.
2012-08-04 08:02:54.554 Calculator[83891:f803] first array element description: (null)
2012-08-04 08:02:54.555 Calculator[83891:f803] second array element description: (null)
2012-08-04 08:02:54.555 Calculator[83891:f803] pair count: (null)
2012-08-04 08:02:54.556 Calculator[83891:f803] count of pairs:  (null)
2012-08-04 08:02:55.987 Calculator[83891:f803] result is float: 0.750000
2012-08-04 08:02:55.988 Calculator[83891:f803] String is ( 6/8 )
2012-08-04 08:02:55.989 Calculator[83891:f803] pair is nil.
2012-08-04 08:02:55.990 Calculator[83891:f803] array is nil.
2012-08-04 08:02:55.991 Calculator[83891:f803] first array element description: (null)
2012-08-04 08:02:55.992 Calculator[83891:f803] second array element description: (null)
2012-08-04 08:02:55.993 Calculator[83891:f803] pair count: (null)
2012-08-04 08:02:55.994 Calculator[83891:f803] count of pairs:  (null)
4

3 に答える 3

1

あなたのコードにはほとんど問題がありません

NSLog(@"result is float: %f",result);

self.formattedNumber = [NSString stringWithFormat:@"( %@%@%@ )",firstNumber,operation,secondNumber];

NSLog(@"String is %@",self.formattedNumber);

// ***** add 
if (self.oneStringValuePair == nil)
{
    self.oneStringValuePair = [NSMutableArray array];
}

if (self.arrayOfStringValuePairs == nil)
{
    self.arrayOfStringValuePairs = [NSMutableArray array];
}

// *****
NSMutableArray *pair = self.oneStringValuePair;
NSMutableArray *array = self.arrayOfStringValuePairs;

//pair = [pair init];   // `init` is used to initialize object
//array = [array init]; // but not allocate object, if array is nil, [array init] will return nil

if (pair==nil)
{
    NSLog(@"pair is nil.");
}

if (array==nil)
{
    NSLog(@"array is nil.");
}

[pair addObject:self.formattedNumber];
NSLog(@"first array element description: %@", [[pair lastObject] description]);

[pair addObject:[NSNumber numberWithFloat:result]];
NSLog(@"second array element description: %@",[[pair lastObject] description]);

// the line below will crash if self.oneStringValuePair is not nil
//NSLog(@"pair count: %@",self.oneStringValuePair.count);
NSLog(@"pair count: %d",self.oneStringValuePair.count);

if (self.arrayOfStringValuePairs)
{
    [array addObject:pair];
}

// the line below will crash if array is not nil
//NSLog(@"count of pairs:  %@",array.count);
NSLog(@"count of pairs:  %d",array);
于 2012-08-04T12:27:06.670 に答える
1

以下のように NSMutableArray を初期化しましたか?

NSMutableArray *pair = [NSMutableArray array];
于 2012-08-04T12:18:11.987 に答える
1

これは何をしますか?

NSMutableArray *pair = self.oneStringValuePair;
NSMutableArray *array = self.arrayOfStringValuePairs;
pair = [pair init];
array = [array init];

self.oneStringValuePair&self.arrayOfStringValuePairsが nilかどうかを印刷して確認できますか。nil の場合、この 2 つのオブジェクトを次のように割り当てます。

self.oneStringValuePair = [[[NSMutableArray alloc] init] autorelease]

また、電話する必要はありません

pair = [pair init];
array = [array init];

それを取り除いてみてください。オブジェクトに割り当てるときはいつでも init (Initializer) を実行する必要はありません。

于 2012-08-04T12:43:55.260 に答える