Запрос SQLite (Spatialite) на iOS работает на 64-битном симуляторе, но ничего больше

У меня есть база данных Spatialite, созданная командой управления Django, которую я встраиваю в приложение для iOS. БД открывается отлично, но я обнаружил, что запрос к базе данных на iOS работает, только если я работаю на 64-битном устройстве. Любые другие устройства, смоделированные или иным образом, производят вывод SQLITE_NOTADB по вызову sqlite3_prepare_v2, с сообщением об ошибке file is encrypted or is not a database,

Очевидно, что Mac, который создал эту базу данных, является 64-битной машиной, но базы данных SQLite должны быть независимыми от битов, поэтому я не понимаю, как это должно быть проблемой. Возможно, это не относится к базам данных Spatialite? Есть ли какие-либо флаги, которые я могу использовать с любой из функций SQLite (возможно, sqlite3_open или же sqlite3_prepare_v2 или может быть pragma команда), чтобы заставить его читать файл так же, как это делает 64-битная арка iOS? Или, может быть, есть способ сгенерировать db Spatialite из django в более совместимом с платформой формате? Любые предложения здесь приветствуются.

Вот фрагмент моего кода, если кто-то может найти какие-либо очевидные проблемы:

@implementation DataModel

@synthesize db;

- (id) init {
    self = [super init];
    if (self! = nil) {
        spatialite_init (1);

        sqlite3 * newDbConnection;
        if (sqlite3_open ([[selfatialiteDbPath] UTF8String], &newDbConnection) == SQLITE_OK) {
            NSLog(@"База данных открыта успешно");
            db = newDbConnection;
        } еще {
            NSLog (@ "Ошибка открытия базы данных");
            дБ = NULL;
        }

    }

    вернуть себя;
}

- (NSArray *) getLockupsForRegion: (MKCoordinateRegion) region {

    NSMutableArray * lockups = [[NSMutableArray alloc] init];
    NSString * query = [NSString stringWithFormat: @ "\
            ВЫБЕРИТЕ имя, X(местоположение) как лат, Y(местоположение) как lon, \
                   крытый, тип, вместимость \
            FROM lockups_lockup \
            WHERE WITHIN (location, GeomFromText ('POLYGON ((% f% f,% f% f,% f% f,% f% f))')); ",
                       regionCorners [0].latitude, regionCorners [0].longitude,
                       regionCorners [1].latitude, regionCorners [1].longitude,
                       regionCorners [2].latitude, regionCorners [2].longitude,
                       regionCorners [3].latitude, regionCorners [3].longitude];

    sqlite3_stmt * оператор;
    if(db &&
       sqlite3_prepare_v2(дБ, [запрос UTF8String], -1, & оператор, NULL) == SQLITE_OK) {
        while(sqlite3_step(оператор) == SQLITE_ROW) {
            NSLog(@"Строка");
        }
    } еще {
        NSLog (@ "Запрос не выполнен по причине: %s", sqlite3_errmsg(db));
        NSLog(@"Sqlite version: %s", sqlite3_version);
    }

    возвратные блокировки;

}

@конец

Запуск приложения и работа на не 64-битной платформе iOS getLockupsForRegion: производит вывод журнала:

SpatiaLite версия..: 4.1.1 Поддерживаемые расширения:
    - 'VirtualShape'    [прямой доступ к шейп-файлу]
    - 'VirtualDbf'      [прямой доступ к DBF]
    - "VirtualText" [прямой доступ CSV/TXT]
    - "Виртуальная сеть" [Дейкстра кратчайший путь]
    - 'RTree'       [Пространственный индекс - R* Дерево]
    - 'MbrCache'        [Пространственный индекс - MBR-кэш]
    - 'VirtualSpatialIndex' [R* Дерево мета-обработчик]
    - 'VirtualFDO'      [совместимость FDO-OGR]
    - "SpatiaLite" [Пространственный SQL - OGC]
Версия PROJ.4......: Отн. 4.8.0, 6 марта 2012 г.
Версия GEOS........: 3.4.2-CAPI-1.8.2 r3921
2013-12-31 00:29:39.567 Приложение [8320:70b] База данных успешно открыта
2013-12-31 00:29:48.128 Приложение [8320:70b] Запрос не выполнен по причине: файл зашифрован или не является базой данных
2013-12-31 00:29:48.710 Приложение [8320:70b] Версия Sqlite: 3.8.1

И вывод журнала под arm64:

Версия SpatiaLite..: 4.1.1 Поддерживаемые расширения: - "VirtualShape" [прямой доступ к шейп-файлу] - "VirtualDbf" [прямой доступ к DBF] - "VirtualText" [прямой доступ к CSV/TXT] - "VirtualNetwork" [кратчайший путь Dijkstra] - 'RTree' [Пространственный индекс - Дерево R *] - 'MbrCache' [Пространственный индекс - Кэш MBR] - 'VirtualSpatialIndex' [Метаденный обработчик дерева R] - 'VirtualFDO' [Совместимость FDO-OGR]
    - 'SpatiaLite'      [Пространственный SQL - OGC] Версия PROJ.4......: Отн. 4.8.0, 6 марта 2012 г. Версия GEOS........: 3.4.2-CAPI-1.8.2 r3921
2013-12-31 01:10:34.491 Приложение [8548:70b] База данных успешно открыта 2013-12-31 01:10:44.913 Приложение [8548:70b] Ряд 2013-12-31 01: 10: 44.913 Приложение [8548:70b] Ряд 2013-12-31 01:10:44.914 Приложение [8548:70b] A строка 2013-12-31 01:10:44.914 приложение [8548:70b] строка 2013-12-31 01:10:44.915 приложение [8548:70b] строка 2013-12-31 01:10:44.915 приложение [8548:70b] Строка 2013-12-31 01:10:44.916 Приложение [8548:70b] Строка 2013-12-31 01:10:44.916 Приложение [8548:70b] Ряд 

Версии:

  • Python: 2.7.5
  • Джанго: 1.6
  • PySqlite: 2.6.3
  • Sqlite (на машине, генерирующей Spatialite db): 3.8.1
  • Spatialite (на машине, генерирующей Spatialite db): 4.1.1
  • Sqlite (на iOS): 3.8.1
  • Spatialite (на iOS): 4.1.1

Любые предложения по этому вопросу будут высоко оценены!

0 ответов

Другие вопросы по тегам