Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
#1

Не получается прочитать Базу Данных из ресурсов приложения - Программирование iOS

31.05.2013, 17:20. Просмотров 959. Ответов 16
Метки нет (Все метки)

Вот функция:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-(void) initDataBase
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dbFileName = @"myBase.sqlite";
    NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:dbFileName];
    
    dataBaseFullPath = databasePath;
    // Check to see if the database file already exists
    BOOL databaseAlreadyExists = [[NSFileManager defaultManager] fileExistsAtPath:databasePath];
    
    if (!databaseAlreadyExists)
    {
        NSArray *pathsDB = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
        NSString* documentsDir = [pathsDB objectAtIndex:0];
        
        NSString *storePath = [documentsDir stringByAppendingPathComponent:@"myBase.sqlite"];
        
        NSFileManager *fileManager = [NSFileManager defaultManager];
        
        if (![fileManager fileExistsAtPath:storePath])
        {
            
            NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"myBase" ofType:@"sqlite"];
            if (defaultStorePath) {
                [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
            }
        }
    }
}
Эта функция инициализирует БД и связывает ее с приложением. Если запуск приложения впервые, то функция достает БД из недр ресурсов. Раньше функция работала на отлично, но в один прекрасный момент "сломалась", а именно когда я перезалил БД. Перезалил правильно (9000+ проверял), все норм, но вот функция не хочет инициализировать БД, и переменная
C#
1
defaultStorePath
почему-то пустая.
Особенность функции заключается в том, что она прекрасно работает, если вместо БД использовать обыкновенную картинку из проекта. Так вот - в чем магия??? Почему функция картинку видит, а БД - нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 17:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не получается прочитать Базу Данных из ресурсов приложения (Программирование iOS):

Не получается открыть Базу Данных
Всем привет, форумчане! :) Я тут недавно задавал вопрос о том, как подключить...

Как вообще сделать эту базу данных онлайн.Чтобы я мог отправлять запросы из приложения в базу
Например база где нибудь строит . А приложение на компах пользователей. ...

Прочитать локально базу данных
Мне прислали архив с базой данных 10-47-31.mysql.gz Внутри соответственно файл...

Чем прочитать базу данных в Mail Agent?
Только я сел за написание конвертора историй агента и уже почти вышел на...

Работа с базой данных в составе ресурсов приложения
Здравствуйте! В задуманном мной проекте мне необходима работа с базой данных....

Можно ли в файл ресурсов запихнуть пустую базу данных, чтобы её потом извлечь из ехе?
Подскажите пожалуйста,в файл ресурсов можно запихнуть пустую базу данных что бы...

16
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
31.05.2013, 17:44 #2
Файловая система iOS регистрозависимая. Т.е. myBase.sqlite и MyBase.sqlite - разные файлы. Может быть, в этом косяк.
0
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
31.05.2013, 18:11 #3
Ты уверен что файл называется myBase.sqlite ... проверь расширение файла, оно точно sqlite ?
Удали myBase.sqlite из проекта и добавь еще раз... Сделай clear в xcode и собери еще раз..
Также если БД изменилась, то на девайсе могла сохраниться старая БД (в папке Documents)... удали полность приложение с устройства.
0
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 12:28  [ТС] #4
mobidevelop, 300 раз проверил название, уверен на сто процентов, что косяка нет. Проверял даже еще один человек, тоже проблемы не нашел

Pro2005, чистил, удалял контент и настройки, все делал - не помогает И самое странное то, что раньше работало! Просто перезалил БД и все - ппц. Логического объяснения найти не получается

Добавлено через 31 минуту
Что еще странно, в режиме дебага когда смотришь код, переменная defaultStorePath ведет себя очень странно. В этом куске кода
C#
1
2
3
4
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"myBase" ofType:@"sqlite"];
            if (defaultStorePath) {
                [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
            }
переменная defaultStorePath получает определенное значение, но потом, когда доходит дело до блока if, ее значение сбрасывается к нулю. Объясните, в чем магия?
0
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
03.06.2013, 12:50 #5
C#
1
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
замени на
C#
1
2
3
NSError *error;
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:&error];
NSLog(@"%@", [error localizedDescription]);
И посмотри что будет за ошибка....
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.06.2013, 12:52 #6
Проект в студию. Там 100500 причин может быть и 100499 от разгильдяйства (не сказать еще хужей). А такие только глазами найти можно
0
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:05  [ТС] #7
Pro2005, дак код в блок не заходит. Переменная defaultStorePath обнуляется (как будто файла в системе проекта попросту нет), и блок пропускается. Поэтому, внутри можно что угодно писать, все равно ничего не изменится

Добавлено через 1 минуту
mobidevelop, извиняюсь за нубской вопрос, но как здесь файл приложить к сообщению? Чет найти не могу
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.06.2013, 13:14 #8
В "Расширенном режиме" чуть ниже кнопки "Ответить" есть раздел "Дополнительные опции".
0
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:16  [ТС] #9
ану теперь
0
Вложения
Тип файла: zip Football Test.zip (5.27 Мб, 5 просмотров)
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:16  [ТС] #10
mobidevelop, вот, получилось
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.06.2013, 13:22 #11
См. картинку
1
Миниатюры
Не получается прочитать Базу Данных из ресурсов приложения  
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:27  [ТС] #12
mobidevelop, я клацнул, теперь вообще failed!

Добавлено через 3 минуты
mobidevelop, ой сорри, игнорируй
0
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
03.06.2013, 13:28 #13
Настройки target, далее "Build Phases" и в "Copy Bundle Resources"... Добавь туда свой myBase.sqlite.
1
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:28  [ТС] #14
mobidevelop, я затупил, скрин неправильно посмотрел) Сейчас попытаюсь сделать, как у тебя на картинке
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.06.2013, 13:31 #15
Там NSLog валится. Обнулять переменные надо прежде, чем совать их куда-либо
Objective-C
1
NSError *error = nil;
1
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:33  [ТС] #16
mobidevelop, блин, спасибо огромное!!! Я бы в жизни сам бы не сделал, так как тупо даже не знал, что в xcode есть подобная штука)
Pro2005, ОГРОМНОЕ СПАСИБО, что помогали мне! Теперь блин на всю жизнь запомню, что в Xcode есть такой список файлов
0
Dargo
1 / 1 / 0
Регистрация: 23.04.2013
Сообщений: 10
04.06.2013, 15:41 #17
А ты добавь БД в таргет
0
Изображения
 
04.06.2013, 15:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 15:41
Привет! Вот еще темы с решениями:

Не получается подключить базу данных
Доброго времени суток. Установил студию 2013, и есть MSSQL 2012. Студия не...

Не получается открыть базу данных
Добрый день! Агентом нужно открыть базу и скопировать определенные значения...

Недостаточно ресурсов. выберите меньше данных или закройте другие приложения
Доброго времени суток. в общем такая проблема. Хочу вывести комбинацию...

Не получается добавить таблицу в базу данных
Возникла необходимость добавить в мою базу данных "Аэропорт" пересадки. Так как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru