不知何故,下面的代码抛出了一个 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];
}
答案 0 :(得分: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}"
答案 1 :(得分:0)
NSMutableArray方法replaceObjectAtIndex:如果给定索引处的对象为nil或新对象为nil,则withObject会引发NSInvalidArgumentException。 仔细检查allPoints NSMutableArray中的一个对象是否为零。
或allPoints NSMutableArray不包含带有CGPoint元素的NSValue对象。
答案 2 :(得分:0)
我不知道如何,但看起来虽然我声明allPoints是 NSMutableArray ,但在我的整个代码中搜索之后,我无法在任何将allPoints指针设置为<的地方找到strong> 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;
}