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

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

31.05.2013, 17:20. Просмотров 967. Ответов 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
Ответы с готовыми решениями:

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

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

Прочитать локально базу данных
Мне прислали архив с базой данных 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 / 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
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 / 0
Регистрация: 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 / 0
Регистрация: 15.10.2012
Сообщений: 100
03.06.2013, 13:16  [ТС] #9
ану теперь
0
Вложения
Тип файла: zip Football Test.zip (5.27 Мб, 5 просмотров)
Noobass
0 / 0 / 0
Регистрация: 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 / 0
Регистрация: 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 / 0
Регистрация: 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 / 0
Регистрация: 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