2015-05-29 18 views
1

У меня есть приложение, которое сохраняет несколько учетных записей пользователей для извлечения данных из моего API. Всегда есть одна учетная запись, которая будет активна или помечена TRUE. Когда я выбираю другую учетную запись, я деактивирую ранее активную учетную запись и активирую выбранную учетную запись или устанавливаю ее как ИСТИНА. Я использую CoreData в представлении таблицы учетных записей.Как установить/удалить несколько учетных записей для учетных данных API

Когда мое приложение запускает мой класс API, он проверяет мою CoreData, чтобы узнать, какая учетная запись активна, и присваивает свои учетные данные моему объекту Credential. Затем я использую эти учетные данные для доступа и получения данных с моего сервера. Все работает до этого момента.

Моя проблема в том, что я выбираю другую учетную запись и сбрасываю свой объект Credentials в моем методе didSelectRowAtIndexPath, мой класс API по-прежнему имеет учетные данные ранее активной учетной записи. Я могу увидеть/напечатать объект Credentials с учетными данными выбранной учетной записи.

Как настроить мои объекты для использования/использования только учетных записей выбранной учетной записи?

class API { 
    var credentials:Credentials! 
    init(){ 
     self.credentials = getActiveStore() 
     // I use self.credentials.username to make API calls later in the code 
    } 


func getActiveStore() -> Credentials?{ 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedContext = appDelegate.managedObjectContext! 
    let fetchRequest = NSFetchRequest(entityName: "User") 
    fetchRequest.returnsObjectsAsFaults = false 
    fetchRequest.predicate = NSPredicate(format: "active = %@", 1 as NSNumber) 
    var error:NSError? 

    let fetchResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as! [User] 
    if fetchResults.count == 1 { 
     let name = fetchResults[0].name 
     let url = fetchResults[0].url 
     let username = fetchResults[0].username 
     let password = fetchResults[0].password 
     return Credentials(name: name, url: url, username: username, password: password) 
    } 
    return nil 
} 

} 

Теперь это класс, который никогда не меняется. Когда я обновляю свои данные после выбора другой учетной записи, данные, которые я вижу, относятся к ранее активной учетной записи. Класс API не хочет меняться.

ответ

1

Создаете ли вы новые учетные данные каждый раз, когда вы выбираете новую ячейку? Потому что вы полномочия получает обновления только в criation объекта

init(){ 
    self.credentials = getActiveStore() 
    // I use self.credentials.username to make API calls later in the code 
} 

Если вы хотите, чтобы учетные данные будут обновлять новый экземпляр вашего API должен быть создан.

Другой способ заключается в создании способа обновления и вызвать его при выборе новой ячейки

func updateCredentials(){ 
    self.credentials = getActiveStore() 
    // I use self.credentials.username to make API calls later in the code 
} 
+0

Спасибо. Иногда такие простые вещи я не могу думать. Это уже третий раз, когда я задал этот вопрос, и, наконец, кто-то понял. – Kleinfeltersville

+0

Иногда нам нужны свежая пара глаз, чтобы сказать то, что мы пропустили. Я просто рад, что смогу помочь. Удачи, закончив ваше приложение – Icaro

Смежные вопросы