Чтение из массива Plist завершает работу симулятора, но не в консоли Xcode - PullRequest
0 голосов
/ 20 августа 2011

Я новичок и застрял на этом в течение нескольких часов.

Я пытаюсь использовать выбранные целые числа PickerView, чтобы: - p1: выбрать путь к массиву plist - p2: выбрать объект по индексу загруженногомассив

Я тестирую переключение пути для файлов 2 plist root = array, когда сборщик делает выбор в Simulator, он падает, но консоль NSLog выводит правильное значение для правильного plist и объекта с индексным значением.

Может кто-нибудь сказать мне, где я иду не так?Я не понимаю, почему симулятор дает сбой, я проверил соединения XIB.

 #define person1 0
 #define person2 1 

     - (void)pickerView:(UIPickerView *)pickerView 
              didSelectRow:(NSInteger)row 
               inComponent:(NSInteger)component {

            if ((component ==person1) || (component == person2)) { 
                    int p1; 
                    int p2; 
                    p1=[pickerView selectedRowInComponent:person1];         
                    p2=[pickerView selectedRowInComponent:person2]; 

            NSString* subPath = [[NSString alloc] init];

            switch (p1) {
                    case 0:
                        subPath = @"data0";
                        break;
                    case 1:
                        subPath = @"data1";
                        break;
                    default:
                        NSLog(@"error");
                        break;
                }

            NSString *path = [[NSBundle mainBundle] pathForResource:subPath ofType:@"plist"];
            NSArray *p1Array = [NSArray arrayWithContentsOfFile:path];
            NSString *resultsMessage = [[NSString alloc] init];
            resultsMessage = [p1Array objectAtIndex:p2];
            NSLog(@"%@", resultsMessage);
            result.text = resultsMessage; //Outlet = UITextView

            [p1Array release];
            [path release];
            [subPath release];
            [resultsMessage release];


                }
        }

1 Ответ

0 голосов
/ 21 августа 2011

Вы не можете освободить ни одну из этих переменных, потому что все они были созданы с помощью методов, которые возвращают автоматически выпущенные объекты.Пожалуйста, прочтите Руководство по программированию управления памятью .

Кроме того, вы можете изменить NSString* subPath = [[NSString alloc] init]; на NSString *subPath = nil;, иначе вы пропустите строку.

...