2011-01-04 8 views
1

Ich versuche eine Möglichkeit zu finden, einen Adressbucheintrag zu ändern, der auf allen Betriebssystemen (auf jeden Fall nach 3.0) gleich funktioniert und korrekt mit Google Kontakte/Outlook synchronisiert wird.SQLite-Fehler beim Aktualisieren des Adressbuchs

Ich habe versucht, die neuen E-Mail-Daten in den bestehenden Datensatz zu schreiben und es wieder heraus zu schreiben. Dies funktionierte für mehrere Tage beim Testen auf iOS4, und ich dachte, ich wäre zu Hause und trocken, aber ich fand, dass unter iOS 3.1.3 der ABAddressBookSave-Aufruf einen SQLite-Datenbankfehler auslöst, der sich über das Erstellen doppelter Einträge beschweren möchte:

CPSqliteStatementPerform: constraint failed for INSERT INTO ABPerson (ROWID, First, Last, Middle, Organization, Kind, Nickname, Prefix, Suffix, FirstSort, LastSort, CreationDate, ModificationDate, CompositeNameFallback, StoreID, FirstSortSection, LastSortSection, FirstSortLanguageIndex, LastSortLanguageIndex) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); CPSqliteStatementReset: PRIMARY KEY must be unique 

Wenn ich versuchte, den alten Eintrag zu löschen und stattdessen durch einen neuen Eintrag zu ersetzen, führte dies zu doppelten E-Mail-Adresseinträgen (ich nehme an, dass der Synchronisierungsprozess dies als neuen Datensatz ansah und versuchte, sie zu verschmelzen, vielleicht wenn Synchronisierung mit Google)

Die Apple-Dokumentation ("Adressbuch-Programmierhandbuch für iPhone") enthält Beispiele zum Erstellen und Löschen von Einträgen, jedoch nicht zum teilweisen Aktualisieren.

Irgendwelche Ideen? Alle Vorschläge erhalten dankbar

Prost

Peter Johnson

Lösliche Apps (www.solubleapps.com)

+0

bearbeitet, um hinzuzufügen, dass der Absturz auf 3.1.3 war während ABAddressBookSave –

Antwort

0

Seine sah aus wie ich das selbst gelöst haben kann.

Ich machte ABAddressBookAddRecord auf dem Datensatz, nachdem es geändert worden war - während dies sinnvoll ist, wenn es ein neuer Datensatz ist, der gerade erstellt wurde, war es wahrscheinlich die Ursache für den SQL-Fehler, wenn es ein alter Datensatz war aktualisiert, zwei Einträge für das Adressbuch erstellt.

Ich muss diese Theorie noch auf 3.1.3 testen (wenn ich mir den Touch meines Bruders ausleihen kann :)), aber ich hoffe, das hilft jemandem.

+0

3.1.3 arbeitete auch –