Ответ 1
В iOS нет понятия нескольких пользователей, поэтому "login" будет ограничен в вашем приложении. Самое простое решение - использовать другое имя файла для постоянного хранилища для каждого пользователя. Это происходит только в одном месте (где бы вы ни устанавливали ваш основной стек данных), поэтому было бы довольно просто реализовать.
В стандартном шаблоне данных ядра постоянное хранилище устанавливается внутри метода persistentStoreCoordinator
делегата приложения. Это строка:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"];
В основном это означает, что данные будут храниться в файле базы данных sqlite в каталоге документов, и файл будет называться coreDataTemplate.sqlite
.
Предполагая, что до того, как этот код будет выполнен, вы включили пользователя и проверили свой идентификатор пользователя на какой-то список и придумали для него уникальный идентификатор. Далее предположим, что идентификатор был сохранен в настройках по умолчанию пользователя.
Измените строку выше:
NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]];
Теперь это даст вам уникальное имя файла для вашего пользователя.
Если вы меняете пользователей, вам необходимо сохранить текущий контекст управляемого объекта, а затем установить постоянный координатор хранилища и контекст управляемых объектов делегата приложения на нуль. Когда они будут повторно подключены, он будет находиться под новым идентификатором пользователя.