Цель C - заполнить массив из чрезвычайно большого списка - PullRequest
2 голосов
/ 17 июня 2011

У меня возникли проблемы с заполнением большого списка в массив. Вот фрагмент кода, который вызывает у меня проблемы:

// Populate the routes.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"routes" ofType:@"plist"];
NSMutableArray *routes = [NSMutableArray arrayWithContentsOfFile:filePath];
NSLog(@"Routes: %@", routes);

// Populate the trips.
NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"trips" ofType:@"plist"];
NSMutableArray *trips = [NSMutableArray arrayWithContentsOfFile:filePath2];
NSLog(@"Trips: %@", trips);

Моя проблема в том, что после отображения каждого изменяемого массива в журналах журнал для массива маршрутов отображается просто отлично, но журнал для массива трипов просто не появляется вообще. Обычно, когда возникает проблема, журнал показывает что-то вроде «Trips: ()», но в этом случае эта строка не появляется вообще. Единственное различие, которое я вижу между этими двумя экземплярами, состоит в том, что список маршрутов представляет собой массив с примерно 1000 словарными объектами, а список отключений содержит почти 92 000 объектов. Есть ли какое-то ограничение на размер списков?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

«Есть ли какое-то ограничение на размер списков?»

Не существует ограничения на размер списков, но есть ограничение на количество данных, которые вы можете передать команде NSLog().

Если бы trips было на самом деле nil, вызов NSLog() был бы успешным и просто вывел бы (null). Однако массив trips заполнен, поэтому он вообще не печатается: NSLog() говорит: «Извините, я ни за что не позволю вам распечатать все это».

Я полагаю, что это, вероятно, изменилось в более поздних версиях OS X из-за возможных проблем безопасности или проблем с производительностью. (В прошлом жесткие диски пользователей заполнялись файлами журналов размером в ГБ, вызванными тем, что один процесс регистрировал сообщение об ошибке сотни раз в секунду; теперь это число ограничено 500 журналами в секунду). Это немного сбивает с толку, почему ничего не распечатывается, и вы не получаете никакой обратной связи от XCode или чего-либо еще, но я думаю, что у системы нет никакого способа узнать, является ли ваше использование NSLog() благими намерениями или нет.

1 голос
/ 17 июня 2011

Согласно документу, если есть проблема с анализом или проблема с открытием файла, будет возвращено nil.Возможно ли, что в этом массивном файле есть плохой символ или опечатка, которая может сломать xml?

"Возвращаемое значение -> Массив, содержащий содержимое файла, указанного в aPath. Возвращает nil, если файлне может быть открыт или если содержимое файла не может быть проанализировано в массив.

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