Как отмечает @CL, с SQLite все в порядке. Но вы не используете SQLite напрямую, поэтому вам может потребоваться выполнить некоторую работу на уровне основных данных для обеспечения согласованности. С приложением iOS и расширением у вас есть два отдельных процесса, которые могут вносить изменения в данные. Ваш код должен учитывать это.
Если ваше расширение приложения отображает только данные (например, расширение «сегодня», которое отображает только данные, созданные в приложении), вам, вероятно, не нужно делать ничего особенного. Если ваше приложение работает в фоновом режиме и создает новые данные, когда расширение отображается, возможно, данные расширения немного устарели. Если это важно, вы можете обновить его. Но сегодня расширения обычно не видны очень долго, так что это, вероятно, не стоит. В этом случае я бы использовал NSReadOnlyPersistentStoreOption
при настройке стека основных данных расширения, просто чтобы прояснить намерение и предотвратить непреднамеренные изменения.
Если ваше расширение приложения создает новые данные или изменяет существующие, ваше приложение должно знать об этом и реагировать соответствующим образом. Какие изменения вы будете вносить, будет зависеть от того, как именно расширение обрабатывает общие данные. Для измененных данных вашему приложению, вероятно, потребуется вызвать refreshObject:mergeChanges:
для любых управляемых объектов в памяти с NO
в качестве второго аргумента. Также, возможно, потребуется повторить любые выборки, если изменения могут повлиять на предикат поиска. Это гарантирует, что вы будете получать самые последние обновления. Для новых данных вам потребуется повторно получить любые данные, с которыми работает приложение, чтобы получить новые добавления/удаления. Хорошее время для проверки — когда приложение выходит на передний план (т. е. когда публикуется UIApplicationWillEnterForegroundNotification
).
person
Tom Harrington
schedule
17.11.2014