Как мне отформатировать текстовый файл для чтения с использованием arrayWithContentsOfFile - PullRequest
2 голосов
/ 10 июня 2010

У меня есть несколько больших списков слов, и я загружал их на место в коде следующим образом:

NSArray *dict3 = [[NSArray alloc] initWithObjects:@"abled",@"about",@"above",@"absurd",@"absurdity", ...

, но теперь это на самом деле странно вызывает ошибку exc_bad_access, я знаю, что это кажется неправдоподобным, но дляпочему-то это вызывает это.(поверьте мне, я просто провожу лучшую часть дня, отлаживая это дерьмо)

В любом случае, я пытаюсь извлечь эти огромные строки кода из моих файлов, но я не уверен, что лучшеподход есть.Я думаю, я мог бы сделать plist, но мне нужно выяснить, как автоматизировать процесс.

было бы проще, если бы я мог просто использовать текстовые файлы, которые я компилировал, так что если кто-нибудь знает, как я могу отформатироватьтекстовый файл, так что

myArray = [NSArray arrayWithContentsOfFile: @"myTextFile.txt"];

будет правильно прочитан как одно слово на элемент в массиве, что действительно будет оценено.

Ответы [ 5 ]

3 голосов
/ 21 декабря 2011

Просто для полноты ответа bShirley, если вы хотите сделать это с помощью редактора pList:

  1. Создайте новый файл plist в вашем проекте.
  2. Убедитесь, что он добавленк вашему пакету в настройках целевой фазы сборки.
  3. Добавьте один элемент в plist, щелкните его правой кнопкой мыши и выберите type = array.
  4. При необходимости добавьте элементы массива.
  5. сохраните, а затем отредактируйте файл plist в текстовом редакторе
  6. , удалите строки <dict>, </dict> и <key> </key>, для данных, которые должны заканчиваться на <array>...your elements...</array>
  7. загрузить вкод через: [[NSMutableArray alloc] initWithContentsOfFile:path] или [NSMutableArray arrayWithContentsofFile:path].Не забудьте сохранить или автоматически выпустить второй, если вы его используете.

Пример рабочего списка:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <array>
        <string>Every 10 Minutes</string>
        <string>Every 20 Minutes</string>
    </array>
</plist>

это сработало для меня в Xcode 4.2 на iPad2 с iOS 5.01

3 голосов
/ 10 июня 2010

myTextFile.txt должен быть в формате .plist, поэтому используйте редактор XCode Plist, чтобы создать его и заполнить данными.

Из документов:

arrayWithContentsOfFile:

  • (идентификатор) arrayWithContentsOfFile: (NSString *) APath

Создает и возвращает массив содержащий содержимое файла указанный aPath. Файл идентифицированный aPath должен содержать строковое представление, произведенное writeToFile: атомарно: метод. В Кроме того, представление массива должен содержать только список свойств объекты (NSString, NSData, NSArray или NSDictionary объекты).

Возвращает ноль, если файл не может быть открыт или если содержимое файла невозможно разобрать в массив.

//Use

[array writeToFile:path atomically:YES];

//to write your array directly, or

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

//or

NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];

//for simpler data (arrays of strings)

//to write from NSData instead

[data writeToFile:path atomically:YES]
2 голосов
/ 10 июня 2010

Проверьте документацию для NSArray:

+ (id)arrayWithContentsOfFile:(NSString *)aPath

Параметры тропинка Путь к файлу, содержащему строковое представление массива, созданного методом writeToFile:atomically:.

Файл должен быть записан writeToFile:atomically: для загрузки из него.

1 голос
/ 29 октября 2011

Если вы создадите plist в Xcode (определенно в 4.1), это будет ВСЕГДА Словарь.Если вы хотите загрузить его как массив, вы можете вручную отредактировать файл (открыть его в TextEdit) и удалить <dict> </dict> и ключ к вашей единственной записи, которая является массивом.Теперь вы можете открыть его обратно в Xcode и отредактировать как обычно.

Apple не удастся!

1 голос
/ 13 июня 2010

Я закончил копаться в коде друзей и нашел свой ответ, на самом деле хороший маленький кусочек кода:

- (NSArray *) readFile:(NSString *) path {


NSString *file = [NSString stringWithContentsOfFile:path];

NSMutableArray *dict = [[NSMutableArray alloc] init];
NSCharacterSet *cs = [NSCharacterSet newlineCharacterSet];
NSScanner *scanner = [NSScanner scannerWithString:file];

NSString *line;
while(![scanner isAtEnd]) {
    if([scanner scanUpToCharactersFromSet:cs intoString:&line]) {
        NSString *copy = [NSString stringWithString:line];
        [dict addObject:copy];

    }
}
NSArray *newArray = [[NSArray alloc] initWithArray:dict];

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