Завершение работы приложения из-за необработанного исключения в приложении Objective-C для iPhone - PullRequest
0 голосов
/ 08 февраля 2010

я написал цикл for в Objective-C, вот так выглядит мой код

NSString *string = [NSString stringWithContentsOfFile=@"/Users/Home/myFile.doc"];
NSString *seperator=@"\n";
NSArray *mainarray = [string componentsSeparatedByString:seperator];
// Since i want to parse each element of mainarray
for(NSString *s in mainarray)
{
  //again parising the string using a new separator
    NSString newseparator = @"=";
    NSArray *subarray = [s componentsSeparatedByString : newseparator];

  //Copying the elements of array into key and object string variables

    NSString *key = [subarray objectAtIndex:0];
    NSLog(@"%@",key);
    NSString *class_name= [subarray objectAtIndex:1];
    NSLog(@"%@",class_name);

   // create an instance for the class_name
      //dont knw how it ll take the value from file and ???  

 //Putting the key and objects values into hashtable 
    NSMutableDictionary = [NSDictionary dictinaryWithObject:class_name forKey:key];
}

Всякий раз, когда я выполняю этот код, это приводит к сбою моей программы: «Завершение работы приложения из-за необработанного исключения NSRangeException

Как узнать диапазон массива и как указать условие завершения в цикле for ???

1 Ответ

2 голосов
/ 08 февраля 2010

Я удивлен, что код даже компилируется. Если я правильно помню, он не сможет скомпилироваться, пока вы не приложите большие усилия, чтобы отключить целый набор предупреждений компилятора.

NSString newseparator = @";";

Это должно дать ошибку, напишите, что у вас нет *.

NSString *key = [subarray objectAtIndex[0]];
NSString *object = [subarray objectAtIndex[1]];

Ни одна из этих строк кода не имеет никакого смысла.

Может показаться, что вы не опубликовали действительный код?

<Ч />

Теперь вернемся к исключению. Исключение диапазона будет брошено, если вы попытаетесь получить доступ к элементу по индексу, который находится за пределами диапазона индексов, доступных в массиве. Таким образом, если componentsSeparatedByString: вернул массив из 0 или 1 элемента, то [subarray objectAtIndex: 1]; вызовет исключение диапазона.

То, что вы не хотите сделать, - это попытаться обработать исключение, используя блок @catch. В Какао (и разработке для iPhone) исключения рассматриваются как неисправимые ошибки.

Итак, вместо этого используйте метод -count в NSArray, чтобы убедиться, что массив действительно содержит # ожидаемых элементов. Поскольку вы пишете случайный синтаксический анализатор, это, вероятно, хорошая идея в качестве минимальной проверки правильности ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...