Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
1

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

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

Author24 — интернет-сервис помощи студентам
Вот функция:

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2013, 17:20
Ответы с готовыми решениями:

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

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

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

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

16
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
31.05.2013, 17:44 2
Файловая система iOS регистрозависимая. Т.е. myBase.sqlite и MyBase.sqlite - разные файлы. Может быть, в этом косяк.
0
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
31.05.2013, 18:11 3
Ты уверен что файл называется myBase.sqlite ... проверь расширение файла, оно точно sqlite ?
Удали myBase.sqlite из проекта и добавь еще раз... Сделай clear в xcode и собери еще раз..
Также если БД изменилась, то на девайсе могла сохраниться старая БД (в папке Documents)... удали полность приложение с устройства.
0
0 / 0 / 0
Регистрация: 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
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
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.06.2013, 12:52 6
Проект в студию. Там 100500 причин может быть и 100499 от разгильдяйства (не сказать еще хужей). А такие только глазами найти можно
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:05  [ТС] 7
Pro2005, дак код в блок не заходит. Переменная defaultStorePath обнуляется (как будто файла в системе проекта попросту нет), и блок пропускается. Поэтому, внутри можно что угодно писать, все равно ничего не изменится

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru