1

不知何故,下面的代码抛出了一个NSInvalidArgumentException,尽管我一步一步地确保一切都具有适当的价值......

我有一个 CGPoints 数组存储在 NSValues 中,这是将所有点偏移 (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

如果给定索引处的对象为 nil 或新对象为 nil,则 NSMutableArray 方法 replaceObjectAtIndex:withObject 引发 NSInvalidArgumentException。仔细检查 allPoints NSMutableArray 中的对象之一是否为零。

或者 allPoints NSMutableArray 不包含带有 CGPoint 元素的 NSValue 对象。

于 2013-08-01T13:50:46.083 回答