Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
#1

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

31.05.2013, 17:20. Просмотров 890. Ответов 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
почему-то пустая.
Особенность функции заключается в том, что она прекрасно работает, если вместо БД использовать обыкновенную картинку из проекта. Так вот - в чем магия??? Почему функция картинку видит, а БД - нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается прочитать Базу Данных из ресурсов приложения (Программирование iOS):

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

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

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

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

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

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

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

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

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

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

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

Не получается занести данные в базу данных - PHP БД
Здравствуйте. Уже полдня сижу и не могу занести.. посмотрите код, что не правильно? это форма: <form action="index.php"...

Не получается приконектить базу данных к фтпшнику - PHP Сети
Проблема не получается приконектить базу данных к ftp использую denwer,в браузере получаю Warning mysql_connect(): Access denied for...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.06.2013, 13:31
Ответ Создать тему
Опции темы

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