Создание контента в мобильном приложении динамическим - PullRequest
1 голос
/ 18 ноября 2011

Я сделал приложение для iphone, которое использует базу данных SQLite, которая предварительно заполнена вопросами / ответами. Каждый раз, когда я хочу исправить / добавить вопросы в базу данных, мне нужно обновить приложение и отправить его в Apple. Я только недавно начал понимать некоторые из API JAX-RS, и я сделал вопросы и т.д. доступными с REST и выставил их как XML. Теперь я хочу использовать данные из Интернета вместо фиксированной базы данных, но у меня есть несколько вопросов:

  • Является ли REST и способ, которым я описываю, «действительным» способом сделать это?
  • Мне нужно, чтобы вопросы были доступны в автономном режиме, поэтому я подумал о загрузке документ на устройство и периодически проверять, если новый документ скачать и скачать.

Вероятно, глупые вопросы, но я раньше не делал много веб-сервисов, поэтому я помогу, и хотя это будет очень полезно: =)

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Итак, ответы:

-Да, это хороший способ работы, вы можете использовать Интернет для загрузки новейших данные. Вы можете сделать это двумя способами:

1) Загрузите только новые вопросы и добавьте их в существующий sqlite. База данных для вашего приложения. Но вы должны знать, что база данных должен быть помещен в каталог документов вместо вашего приложения Bundle. Пример кода вы можете проверить здесь.

        BOOL success;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
        self.imagesPath = [documentsDirectory stringByAppendingPathComponent:@"images"];

//Check if you have local copy of your database
        if (![fileManager fileExistsAtPath:imagesPath])
        {
        NSError *error;
            if (![fileManager createDirectoryAtPath:imagesPath withIntermediateDirectories:YES 
                          attributes:NULL error:&error])
            {
                NSAssert1(0, @"Error cannot create a directory %@", imagesPath);
            }
        }



success = [fileManager fileExistsAtPath:writableDBPath];

//If you have no local copy, than copy default database, which you have added to project
//Instead of this you can also download database from internet.     
        if (!success)
        {
            // The writable database does not exist, so copy the default to the appropriate location.
            NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"db.sqlite"];
            success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
            if (!success) {
                NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
            }
        }

2) Вы можете скачать всю базу данных sqlite и заменить существующую. Это довольно просто, но помните, что вы должны использовать больше трафик в этом случае.

  • Да, просто храните локальную базу данных в каталоге документов, и
    обновите, когда вам нужно.
0 голосов
/ 18 ноября 2011
  • Для хранения ваших вопросов на сервере должна быть база данных (в базе данных: «Блок данных хранится любым удобным вам способом, будь то в текстовом, XML или SQL»).
  • Вам нужно иметь интерфейс для запроса этих вопросов.
    • Простая (но не очень оптимизированная) идея состоит в том, чтобы сохранить эту базу данных в формате xml и заставить приложение периодически (или с помощью пользовательского ввода) получать этот xml и анализировать его.
    • ЕщеСложный и лучший подход заключается в том, чтобы приложение сообщило «когда» оно в последний раз получало вопросы и предоставило только XML с различиями.
    • Ваш подход к REST подходит и может быть одним из методов, которые я описал выше (вы используетеREST, чтобы вернуть его «простым» или «более сложным» способом. Но если вам не нужна аутентификация, вам могут не потребоваться все эти накладные расходы. В конце концов, это зависит от вас и ваших потребностей.
  • Анализ этого файла (в качестве примера я использую XML, но вы можете использовать JSON, CSV и т. Д.)
  • Хранить данные на вашем устройстве.
    • Если вы используете «простой» подход, вы можете стереть всю базу данных и воссоздать ее, используя xml
    • Если вы используете «более сложный» подход, вам нужно просто добавить то, что вы получите, так какваш сервер ДОЛЖЕН предоставлять только new вопросы

Подводные камни:

  • Ваша база данных НЕ должна находиться внутри пакета приложения, иначе вы не сможете писать в него (вы можете писать в него только на симуляторе, а не на устройстве)
  • Тщательно продумайте, как хранить эти вопросы на устройстве (если это приложение только для iOS, я рекомендую CoreData)

Если вы хотите отобразить этот «красный шар» с номером на нем (в данном случае это количество обновлений) на значке вашего приложения (это называется «значок»), вам следует использовать уведомления, вам нужнозарегистрируйте идентификатор клиента в базе данных вашего сайта, и каждый раз, когда происходит обновление, вы должны уведомлять каждого клиента.Это не тривиально, и я полагаю, что вам следует сначала реализовать решение, в котором приложение выполняет поиск данных, а не наоборот.

Если вы хотите узнать больше об уведомлениях, вы можете использовать:

Имейте в виду, что он не установлен в камне,Существуют и другие подходы (в любом случае должно ), но это рабочий процесс, который я использую, когда мне нужно обновить базу данных клиента.

Надеюсь, он направит вас в правильном направлении.Не стесняйтесь просить разъяснений (если необходимо).

...