Sqlite Ionic: устройство IOS не находит базу данных - PullRequest
0 голосов
/ 26 октября 2018

Я использую Ionic для создания приложений для iOS и Android.Я хочу сохранить пользовательскую запись после первого входа пользователя в систему, чтобы ему не приходилось снова входить в систему после закрытия приложения.Таким образом, когда приложение запускается, оно проверяет, вошли ли они в систему, если в таблице есть запись пользователя.Если вы не вошли в систему (при первом запуске приложения или позже нажмите «Выйти»), он должен перейти на страницу входа.

В app.component.ts

this.platform.ready().then(() => { 
          this.registerBackButton();
          this.statusBar.styleDefault(); 
          this.sqlStorageService.initializeDatabase().then(()=> {  
            this.sqlStorageService.isLoggedIn().then(loggedIn => { 
              this.loader.dismiss();
              this.splashScreen.hide();
              if (loggedIn){  
                this.rootPage = HomePage;
                }else{   
                  this.rootPage = LoginPage;
                }   
            });
        }); 

В sqlStorageService :

initializeDatabase()
  { 
      return this.sqlite.create({name: 'data.db', location: 'default' }).then(db => {
          this.db = db; 
          return this.db.executeSql('CREATE TABLE IF NOT EXISTS CurrentUser(userName text primary key, firstName text, lastName text, bearerToken text, claims text)', [])
          .then(data => {console.log("initialize database complete")})
      })
  }

isLoggedIn():Promise<boolean>{
    return this.get().then(data => {
        return data != null;
    }) 
}


get() : Promise<IAppUserAuthorization> | null{  
    return this.db.executeSql('SELECT userName, firstName, lastName, bearerToken, claims FROM CurrentUser', [])
        .then(data => {   
            if (data.rows.length == 0){
                return null;
            } 

            let user: IAppUserAuthorization =
            {
                userName: data.rows.item(0).userName,
                firstName: data.rows.item(0).firstName,
                lastName: data.rows.item(0).lastName,
                bearerToken: data.rows.item(0).bearerToken,
                isAuthenticated: data.rows.item(0).isAuthenticated,
                claims: JSON.parse(data.rows.item(0).claims) 

            }  
            return user;  
    })   
}  

После того, как пользователь authenticated

 return this.db.executeSql('insert or replace into CurrentUser(userName, firstName, lastName, bearerToken, claims) values(?, ?, ? , ?, ?)',
        [appUser.userName, appUser.firstName, appUser.lastName, appUser.bearerToken, JSON.stringify(appUser.claims)])
            .then(data => { 
        return JSON.parse(data.rows.item(0).value); 
      }); 

Все это прекрасно работает, когда я развертываюсь на устройстве Android.Я вхожу в первый раз.Затем закройте приложение ... затем снова откройте приложение, и я попаду на домашнюю страницу.

При развертывании на любом устройстве iOS я вхожу в первый раз.затем закройте приложение .. затем снова откройте приложение, и я попаду на страницу входа.

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

Я бьюсь головой об этом уже 3 дня.Я уверен, что это что-то очень тонкое, я скучаю, но я не понимаю, почему это работает безупречно для Android, а не iOS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...