无法将对象添加到NSMutableArray

时间:2012-08-04 12:13:40

标签: objective-c xcode4.3

我是一个在RPN计算器上工作的新手,我正在尝试设置一个包含两个成员数组的数组来存储字符串/值对,以便我以后可以使用它们来显示完整的数字序列/操作员被迫到达用户现在的任何地方。问题是,无论我得到什么错误都意味着数组不会填充。有关如何解决这个问题的想法吗?

这是我的代码(oneStringValuePairarrayOfStringValuePairs是在.h中声明为(nonatomic, strong)并在.m中合成的NSMutableArrays):

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);

这是5 3 + 6 /的NSLog:

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)

3 个答案:

答案 0 :(得分:1)

您是否初始化了NSMutableArray,如下所示?

NSMutableArray *pair = [NSMutableArray array];

答案 1 :(得分: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);

答案 2 :(得分:1)

这是做什么的?

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

是否可以打印并检查self.oneStringValuePair& self.arrayOfStringValuePairs是或否。如果它是nil,则分配这两个对象。

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

也无需致电

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

尝试删除它。无论何时使用对象分配它,都不需要执行init(初始化程序)。