Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Objc中处理数组越界的一种办法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Objc的数组如果在访问时索引非法,则会抛出NSRangeException异常,貌似没有妥协的办法.

这个不像ruby,对于数组的访问有2套API,一种和Objc类似非法异常铁定报错;另外一种出现异常只是返回一个非法的值,这也很方便,尤其在某些情况下.

一般的在Objc中如果想要处理这种情况,可以在每次访问前检查Index是否合法,但还有一种方法,就是写捕获异常的处理代码,如下:

//重新调整当前地图中队伍的顺序
-(void)reorderPlayers{
    //其他处理代码...
    GameCharacter *followGC = nil;
    GameCharacter *targetGC = _panda;
    NSInteger maxFollowCount = MIN(2,gd.players.count-1);
    for (int i = 1; i <= maxFollowCount; i++) {
        className = gd.players[i][@"playerName"];
        followGC = [GameCharacter gcWithName:className wihtGameScene:_gameScene];

        NSDictionary *Dict;
        @try {
            //如果之前在游戏中添加了新的角色(之前地图中只有1个,现在内部数据变为2个)则必须处理数组访问异常
            Dict = [orgPlayers objectATindex:i];
            followGC.position = [Dict[@"Position"] CGPointValue];
            [followGC setFaceDirection:[orgPlayers[i][@"FaCETo"] intValue]];
            [followGC followInPlace:targetGC];
        }
        @catch (NSException *exception) {
            if ([exception.name isEqualToString:@"NSRangeException"]) {
                CCLOG(@"A NSRangeException happened!");
                //如果出现范围异常表示followGC是新添加的角色,我们调用follow而不是followInPlace方法
                [followGC follow:targetGC];
            }else{
                @throw [NSException exceptionWithName:@"otherErr" reason:@"otherErr" userInfo:nil];
            }
        }
        [_bgLayer addChild:followGC];
        targetGC = followGc;
    }
}

代码其他的游戏逻辑不用去管,主要看其中的异常捕获和处理方法.

在注释那行之后可能发生索引非法的异常,所以我们用@try…@catch机制对其进行捕获,在发生异常时我们做变通处理,否则代码流保持不变.

注意,这里没有用到@finally块,因为没有那个必要.

大佬总结

以上是大佬教程为你收集整理的Objc中处理数组越界的一种办法全部内容,希望文章能够帮你解决Objc中处理数组越界的一种办法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。