NSArray - objectAtIndex:

时间:2011-05-29 18:59:44

标签: iphone objective-c nsarray

我有问题。如果objectAtIndex:x为空,我会收到错误。在我的代码中,用户必须插入由“/”分隔的代码,如32/31/43或甚至32 // 12。一切正常但如果用户插入一个没有“/”的数字我得到了图片中显示的错误,但我想得到一个警告视图,告诉用户代码插入的格式错误。我希望它很清楚。谢谢 enter image description here

3 个答案:

答案 0 :(得分:2)

可能最好的方法是在创建阵列后检查它,以确保有3个值。

NSArray *componentDepthString = [depthString componentsSeperatedByString:@"/"];
if ([componentDepthString count] == 3) {
    // everything is good and you can continue with your code;
    //  rest of the code;
} else {
    // the user input bad values or not enough values;
    UIAlertView *myAlert = [[UIAlertView alloc] 
                                    initWithTitle:@"can't continue"
                                    message:@"user input bad values"
                                    delegate:self
                                    cancelButtonTitle:@"Cancel"
                                    otherButtonTitles:nil];
    [myAlert show];
    [myAlert release];
}

编辑:您必须编辑标题和消息以说出您想要的内容,但这是关于如何在错误之前检查错误数据以及如何显示警告的基本思路。您将不得不添加自己的逻辑如何与用户一起处理它

答案 1 :(得分:2)

您可以使用

测试数组中的组件数
[componentDepthString count]

在盲目地进入数组之前,请确保数组中包含所需数量的元素:

// probably a bad idea to name the array with the word "string in it
NSArray *componentDepths = [depthString componentsSeparatedByString:@"/"];
NSInteger numComponents = [componentDepths count];

if(numComponents < 3) {
    // show an alert...

    return;
}

// otherwise proceed as before

答案 2 :(得分:0)

对于字符串“2”componentsSeparatedByString将返回一个只包含单个对象的数组:字符串“2”。

您正在尝试读取索引1处的对象(即第二个对象),但该数组只有一个对象。尝试从NSArray的末尾读取值是错误的。

看起来你要做的就是要求输入的值有两个'/',所以为什么不先检查?

if ([componentDepthString count] != 3) {
   // show an alert and return
}