Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 即使正确声明,也无法访问NSMutableArray对象_Iphone_Objective C_Xcode_Memory Management_Nsmutablearray - Fatal编程技术网

Iphone 即使正确声明,也无法访问NSMutableArray对象

Iphone 即使正确声明,也无法访问NSMutableArray对象,iphone,objective-c,xcode,memory-management,nsmutablearray,Iphone,Objective C,Xcode,Memory Management,Nsmutablearray,我遇到了一个非常奇怪的问题,至少对我来说,我无法找出解决方案。问题是我在接口中声明了两个NSMutableArray NSMutableArray *lastItemForFormula; NSMutableArray *lastItemForExpression; @property (nonatomic, retain) NSMutableArray *lastItemForFormula; @property (nonatomic, retain) NSMutableAr

我遇到了一个非常奇怪的问题,至少对我来说,我无法找出解决方案。问题是我在接口中声明了两个NSMutableArray

 NSMutableArray *lastItemForFormula;  
 NSMutableArray *lastItemForExpression;  

 @property (nonatomic, retain) NSMutableArray *lastItemForFormula;
 @property (nonatomic, retain) NSMutableArray *lastItemForExpression;  
然后在实现中综合它们:

@synthesize lastItemForFormula;
@synthesize lastItemForExpression;  
试着像这样使用它我的功能:

-(void)elementClicked:(id)sender {
    UIButton *btnClicked=(UIButton*)sender;  
    NSString* formula=[label text];  
    NSString *stringToBeConcatenated=[elements objectAtIndex:btnClicked.tag];  
    formula=[formula stringByAppendingString:stringToBeConcatenated];  
    [lastItemForFormula addObject:[formula copy]]; //First 
    [label setText:formula];  
    stringToBeConcatenated=[elements objectAtIndex:btnClicked.tag+1];  
    if ([labelExpression.text length]==0) {  
        [lastItemForExpression addObject:[stringToBeConcatenated copy]];  //Second
        [labelExpression setText:[lastItemForFormula objectAtIndex:[lastItemForFormula count]]];  
    }  
    else {  
        [lastItemForExpression addObject:[[NSString stringWithFormat:@"%@+%@",[labelExpression text], stringToBeConcatenated] copy]]; //Third 
        [labelExpression setText:[lastItemForFormula objectAtIndex:[lastItemForFormula count]]];  
    }  
}  

但是当我调试程序时,我在两个数组中都没有得到任何结果。。。将鼠标悬停在两个上方时,始终显示0x0。我确信这很可能是内存管理问题。非常感谢您的帮助。

您从未初始化数组,因此您将addObject消息发送给nil

在尝试将对象添加到数组中之前,请在拥有数组的类的init中调用:

lastItemForFormula = [NSMutableArray new];
lastItemForExpression = [NSMutableArray new];

然后确保释放dealloc中的数组。

您忘记保留它们。已修复。@bbum最近发生了类似的情况。。。在这种情况下你的建议是什么???我自己仍在学习objective-c,但我认为由于属性被定义为(非原子的,retain),通过将数组分配给属性,它将自动被保留。另外,[NSMUTABLEARRY new]比[NSMUTABLEARRY]更可取吗?我认为“新”只能在Objective-c++中工作。。。