2013-03-20 3 views
0

У меня есть текстовые файлы, которые содержат некоторые основные данные, которые мне нужны для моего приложения. Я могу читать файлы и я получаю путь к файлу с:Как написать файл в Objective-C?

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Money" ofType:@"txt"]; 

Для записи в файл я думаю, что я хотел бы использовать:

[[HoldString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO]; 

Это не работает, хотя, я также попытался адресности путь к файлу с:

NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString* fileAtPath = [filePath stringByAppendingPathComponent:@"Money.txt"]; 

Ничего из этого не работает. Я хотел бы иметь возможность читать из файла, не используя CoreData.

ответ

1

Вы не можете писать путь, который находится внутри вашего пакета приложений; ваш комплект доступен только для чтения. Вот почему первый подход не будет работать.

Но ваш второй подход должен фактически работать, чтобы сформировать допустимый путь в каталоге документов. Вы уверены, что там что-то есть? Этот каталог будет пустым, когда ваше приложение будет установлено. Если вы хотите изменить текстовый файл, который вы сами включаете, сначала скопируйте его из пути пакета в папку документов.

+0

Была ли папка с документами? У меня был этот код, если (! [[NSFileManager defaultManager] fileExistsAtPath: fileAtPath]) { [[NSFileManager defaultManager] createFileAtPath: fileAtPath: атрибуты nil: nil]; } –

+0

@ user1713165: Папка документов существует на диске. Если вы используете симулятор, вы можете перейти к нему с помощью Finder на вашем Mac. Ни в коем случае пользователь не может напрямую взаимодействовать с ним; это просто хорошее место для размещения документов вашего приложения, когда это необходимо. –

+0

@ user1713165: фрагмент кода в вашем комментарии фактически ничего не делает. Создание файла с содержимым «nil» бессмысленно. На диск ничего не записывается. –

1

Ресурсный комплект приложения доступен только для чтения (по крайней мере, на реальном устройстве). Вам необходимо записать данные в другое место, например в папку «Документы».

Большинство приложений проверяют, существует ли файл в каталоге «Документы». Если нет, он копирует файл из пакета ресурсов. Затем все чтение и письмо копируются.

+0

Это объясняет многое. Подобно тому, как папка отображается в приложении, но не изменяется в файле. –

0

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

В вашем случае альтернативой будет использование NSUserDefaults. Таким образом, в первый раз, когда приложение запускается, вы можете читать из этого файла (Money.text) в комплекте (или не удерживать его на комплекте, если вы это сделаете). Прочитав ее, вместо того, чтобы писать на нем, вы сохранить весь текст NSUserDefaults так:

[[NSUserDefaults standardUserDefaults] setObject: holdString forKey: @"money" ]; // By convention you should name it holdString instead of HoldString. 

Для чтения данных:

NSString* moneyStr= [[NSUserDefaults standardUserDefaults] objectForKey: @"money"];