如何在目标c中的touchEnded中访问数组元素

时间:2013-02-21 06:52:02

标签: ios objective-c nsarray touchesbegan

我对TouchesEnded方法有一个非常奇怪的行为

我使用这种语法来访问数组元素

int cal=((b * (b-a-1))+4);
printf("cal is %d",cal);
c=[file_contents objectAtIndex:cal];          
printf("message2------%d",c);

并且它在程序中的任何地方工作正常,但是当我在上面调用这段代码时 touchesEnded使其崩溃应用>>

实际上这是我的功能,我在viewdidloadtouchesEnded

再次拨打两次电话
int values_retrieval(int a,int b)
{
//NSLog(@"for loop variable i=%i--> the retrieve coordinates are::%@", a,[file_contents objectAtIndex:(b * (b-a-1))+4]);
printf("message111111111");
int cal=((b * (b-a-1))+4);
printf("cal is %d",cal);
NSString *c=[file_contents objectAtIndex:cal];
int val=[c intValue];
printf("message222222222------%d",val);
return val;
}

viewdidload中调用它时一切顺利,当它在touchesEnded方法中调用时,应用程序崩溃了

我不知道出了什么问题

这是我的TouchedEnded方法

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint     touchedEnd;

    int index=5;
    int i=3;
    printf("value of i is %d",i);
    NSString *test=values_retrieval(i, index);
    printf("val issssssssssssssssssss %d",test);

    touchedEnd = [[touches anyObject] locationInView:touch.view];
}

赞赏任何想法或帮助

2 个答案:

答案 0 :(得分:1)

c正在处理int并且您在printf()中为其分配了一个对象。

有可能cal超出了数组的范围,或者你的数组超出了Scope而不再存在,因为你正在使用ARC,或者你以其他方式释放它。

试试这个:

int cal=((b * (b-a-1))+4);
printf("cal is %d",cal);
if(cal > file_contents.count-1) 
{
printf("Cal is too big"); 
}
else 
{
c=[file_contents objectAtIndex:cal];    
}      
NSLog(@"message2------%@", c);

答案 1 :(得分:0)

根据你的评论:

  

NSString * c = [file_contents objectAtIndex:cal];这就是行   我收到任何帮助@AKV

的EXC_BAD_ACESS错误

如果您未保留对象并且已释放并尝试访问该对象,则会显示错误EXC_BAD_ACESS

如果您使用ARC,请确保file_contents类型为strong

如果您使用的是非ARC,请使用retain