0

TouchesEnded メソッドについて非常に奇妙な動作をしています

この構文を使用して配列要素にアクセスしています

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

プログラムのどこでも問題なく動作しますが、関数で上記のコードを touchesEnded呼び出すと、アプリがクラッシュします>>

viewdidload実際、これは私が2回呼び出している私の関数ですtouchesEnded

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];
}

どんなアイデアや助けも大歓迎です

4

2 に答える 2

1

cはintとして扱われ、printf()でオブジェクトを割り当てています。

calがアレイの境界外にあるか、アレイがスコープ外になり、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);
于 2013-02-21T07:01:20.020 に答える
0

あなたのコメントによると:

NSString *c=[file_contents objectAtIndex:cal]; これは、EXC_BAD_ACESS ヘルプ @AKV のエラーが発生している行です。

EXC_BAD_ACESSオブジェクトを保持せず、解放されてアクセスしようとすると、エラーが表示されます。

ARC を使用している場合file_contentsは、 がstrongタイプであることを確認してください。

ARC 以外を使用している場合は、 を使用しますretain

于 2013-02-21T08:28:02.813 に答える