1

どういうわけか、以下のコードはNSInvalidArgumentExceptionをスローしていますが、すべてが適切な値であることを確認するために段階的に実行しました...

NSValues に格納されている CGPoints の配列があり、これはすべてのポイントを (x,y) でオフセットするメソッドの一部です。

for (int i = 0; i < [allPoints count]; i++) {
    CGPoint pt = [[allPoints objectAtIndex:i] CGPointValue];
    CGPoint newPt = CGPointMake(pt.x + x, pt.y + y);
    NSValue *newEntry = [NSValue valueWithCGPoint:newPt];
    [allPoints replaceObjectAtIndex:i withObject:newEntry];
}
4

3 に答える 3

0

これを試して 、

------------------------------サンプルコード------------------- --------------

CGPoint pt =CGPointMake(20, 30);
NSValue *point = [NSValue valueWithCGPoint:pt];

CGPoint pt2 =CGPointMake(40, 40);
NSValue *point2 = [NSValue valueWithCGPoint:pt2];

NSMutableArray *allPoints =[[NSMutableArray alloc]initWithObjects:point,point2, nil];
NSLog(@"%@",allPoints);
// -------------output----------
//     "NSPoint: {20, 30}",
//     "NSPoint: {40, 40}"
int x=10; int y=20;
for (int i = 0; i < [allPoints count]; i++)
{
    CGPoint pt = [[allPoints objectAtIndex:i] CGPointValue];
    CGPoint newPt = CGPointMake(pt.x + x, pt.y + y);
    NSValue *newEntry = [NSValue valueWithCGPoint:newPt];
    [allPoints replaceObjectAtIndex:i withObject:newEntry];
}
NSLog(@"%@",allPoints);
// -------------output----------
//     "NSPoint: {30, 50}",
//     "NSPoint: {50, 60}"
于 2013-08-01T13:44:23.630 に答える
0

方法はわかりませんが、 allPoints をNSMutableArrayと宣言し、コード全体を検索した後、 allPoints のポインターをNSArrayに設定した場所を見つけることができませんでしたが、システムは allPointsは現在NSArrayであるため、オブジェクトを置き換えることはできません。

したがって、新しい NSMutableArray で回避する必要があります。

for (int i = 0; i < [allPoints count]; i++) {
    CGPoint pt = [[allPoints objectAtIndex:i] CGPointValue];
    CGPoint newPt = CGPointMake(pt.x + x, pt.y + y);
    NSValue *newEntry = [NSValue valueWithCGPoint:newPt];
    NSMutableArray *temp = [NSMutableArray arrayWithArray:allPoints];
    [temp replaceObjectAtIndex:i withObject:newEntry];
    allPoints = temp;
}
于 2013-08-01T14:25:54.800 に答える
0

NSMutableArray メソッド replaceObjectAtIndex:withObject は、指定されたインデックスのオブジェクトが nil または新しいオブジェクトが nil の場合、NSInvalidArgumentException を発生させます。allPoints NSMutableArray 内のオブジェクトの 1 つが nil かどうかを再確認してください。

または allPoints NSMutableArray に、CGPoint 要素を持つ NSValue オブジェクトが含まれていません。

于 2013-08-01T13:50:46.083 に答える