Objective c can';t将对象添加到NSMutableArray

Objective c can';t将对象添加到NSMutableArray,objective-c,xcode4.3,Objective C,Xcode4.3,我是一个RPN计算器的新手,我正在尝试设置一个由两个成员数组组成的数组来存储字符串/值对,以便以后可以使用它们来显示用户现在所在的位置所需的数字/运算符的完整序列。问题是,无论我犯了什么错误,都意味着数组无法填充。有没有关于如何解决这个问题的想法 下面是我的代码(oneStringValuePair和arrayOfStringValuePairs是在.h中声明为(非原子,强)并在.m中合成的NSmutableArray): 这是5 3+6/的NSLog: 2012-08-04 08:02:54.

我是一个RPN计算器的新手,我正在尝试设置一个由两个成员数组组成的数组来存储字符串/值对,以便以后可以使用它们来显示用户现在所在的位置所需的数字/运算符的完整序列。问题是,无论我犯了什么错误,都意味着数组无法填充。有没有关于如何解决这个问题的想法

下面是我的代码(
oneStringValuePair
arrayOfStringValuePairs
是在.h中声明为
(非原子,强)
并在.m中合成的NSmutableArray):

这是
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)

您是否已按如下方式初始化NSMutableArray

NSMutableArray *pair = [NSMutableArray array];

代码中几乎没有问题

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);
这有什么用

NSMutableArray *pair = self.oneStringValuePair;
NSMutableArray *array = self.arrayOfStringValuePairs;
pair = [pair init];
array = [array init];
能否打印并检查
self.onestringvaluepairs
&
self.arrayOfStringValuePairs
是否为零。如果为nil,则按如下方式分配这两个对象

self.oneStringValuePair = [[[NSMutableArray alloc] init] autorelease]
也不需要打电话

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

试着把它去掉。每当您为其分配对象时,无需执行init(初始值设定项)。

像以下NSLog一样打印数组计数(@“%ld”,[yourArray count]);如果没有
+alloc
,请不要使用
-init
。Aravindhanavi,谢谢——这很有帮助。亚当,谢谢你的提醒。我现在看到了这样一幅画面:如果我再次使用
-init
而不使用
-alloc
,我的祖先的鬼魂每晚都会来折磨我……谢谢——我开始掌握属性,但分配/初始化它们仍然让我困惑。这很有帮助。非常感谢!这些都很有帮助。当涉及到属性时,分配/初始化仍然让我感到困惑。。。。
pair = [pair init];
array = [array init];