Je développe une application Web multi-plateforme basée sur cordova en utilisant sapui5 framework v1.44 et indexedDB pour stocker des données. L'application fonctionnait bien jusqu'à la fin ios update, 10.3.1, maintenant il se bloque en essayant d'écrire dans indexedDB. J'utilise la méthode put pour mettre à jour les données et j'ai fait une installation propre de l'application. Le cadre de code où je tente d'écrire à IndexedDB est la suivante:IOS 10.3.1 L'application basée sur cordova se bloque en essayant d'écrire sur IndexedDB
writeToIDB: function (objStoreName, result, success, error) {
//Asynchronous function
var defer = Q.defer();
var res = [];
if (!!result && Array.isArray(result)) {
res = result;
} else if (!!result && result.hasOwnProperty("results") && Array.isArray(result.results)) {
res = result.results;
} else if (!!result && typeof result === 'object') {
res.push(result);
}
if (res.length >= 0) {
if (window.myDB) {
if (!window.myDB.objectStoreNames.contains(objStoreName)) {
console.log("ObjectStore for " + objStoreName + " doesn't exist");
if (error) {
error("ko")
} else {
defer.reject("ko");
}
} else {
var oTransaction = window.myDB.transaction([objStoreName], "readwrite");
var oDataStore = oTransaction.objectStore(objStoreName);
oTransaction.oncomplete = function (event) {
console.log("Transaction completed: database modification for " + objStoreName + " finished.");
if (success) {
success();
} else {
defer.resolve("ok");
}
};
oTransaction.onerror = function (event) {
console.log("Transaction for " + objStoreName + " not opened due to error. Check for duplicate items or missing properties!");
console.log(event.target.error);
if (error) {
error("ko")
} else {
defer.reject("ko");
}
};
var oRecord = {};
for (var i = 0; i < res.length; i++) {
oRecord = res[i];
oDataStore.put(oRecord);
}
}
} else {
this.createIDB().then(
function (resCreate) {
console.log("DB Created successfully");
if (!window.myDB.objectStoreNames.contains(objStoreName)) {
console.log("ObjectStore for " + objStoreName + " doesn't exist");
if (error) {
error("ko")
} else {
defer.reject("ko");
}
} else {
var oTransaction = window.myDB.transaction([objStoreName], "readwrite");
var oDataStore = oTransaction.objectStore(objStoreName);
oTransaction.oncomplete = function (event) {
console.log("Transaction completed: database modification for " + objStoreName + " finished.");
if (success) {
success();
} else {
defer.resolve("ok");
}
};
oTransaction.onerror = function (event) {
console.log("Transaction for " + objStoreName + " not opened due to error. Check for duplicate items or missing properties!");
console.log(event.target.error);
if (error) {
error("ko")
} else {
defer.reject("ko");
}
};
var oRecord = {};
for (var i = 0; i < res.length; i++) {
oRecord = res[i];
oDataStore.put(oRecord);
}
}
}.bind(this),
function (err) {
console.log("DB Creation failed");
if (error) {
error("ko")
} else {
defer.reject("ko");
}
}.bind(this)
);
}
} else {
if (error) {
error("ko")
} else {
defer.reject("ko");
}
}
if (typeof success === 'undefined' && typeof error === 'undefined') {
return defer.promise;
}
},
p.s.i. ont omis des parties du code. Cela fonctionnait très bien avec la version précédente de ios, je pense que j'avais installé le 10.2.1, maintenant il se bloque simplement après avoir appelé la méthode put. J'ai essayé de mettre à jour ios vers la bêta de 10.3.2 mais le résultat est le même. Quelqu'un d'autre a remarqué cela ou a une idée de la façon de résoudre ce problème? Merci K
MISE À JOUR J'ai trouvé la question: les types de données complexes. Comme IndexedDB supporte l'enregistrement et la récupération des types de données complexes, j'ai eu quelques propriétés qui étaient des tableaux ou des objets que j'avais l'habitude d'enregistrer dans certains de mes ObjectStores. C'est vraiment un gros problème pour moi parce que la seule solution que je peux penser pour cela est de stabiliser les champs complexes mais comme je travaille avec beaucoup de données cela créerait un gros problème de performance. J'espère que l'équipe de développeurs d'ios trouvera rapidement une solution pour cela
Avez-vous des erreurs dans la console? –
non, pas même un –