| 

.NET C# Java Javascript Exception

2
Ich verwende in einer Documentbased App Core Data und speichere die Datei im SQLite-Format. Das funktionierte bisher reibungslos. Erst seit ich Apples Sandboxing aktiviert habe (User Selected File Access auf Read/Write Access gesetzt), funktioniert das Speichern der Dateien nicht mehr. In die Console schreibt Xcode folgende Meldung:

Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed: with userInfo = {
NSSQLiteErrorDomain = 14;
}

Wie kann ich das Problem lösen?
News:
19.05.2012
Roadrunner42 1 1
2 Antworten
0
Diese Antwort legt nahe, dass die Fehlermeldung nicht unbedingt etwas mit SQLite / Core Data zu tun haben muss. Wahrscheinlich limitiert die Sandbox die Anzahl offener File-Descriptoren.
Ich würde prüfen, ob alle Ressourcen tatsächlich freigegeben werden. Vielleicht hast du auch ein Leak, dass erst bei der Verwendung der Sandbox zutage tritt.
21.05.2012
puls200 3,8k 7
0
Es gibt eine Lösung für das Problem (leider nicht ganz ohne Nebenwirkungen, siehe Link).
SQLite schreibt bei jeder Transaktion eine temporäre Journal-Datei (Bezeichner: dateiname-journal), die nach erfolgreicher Transaktion wieder gelöscht wird. Sandboxing verhindert das! Deshalb ist das Speichern einer editierten SQLite-Datei nicht mehr möglich. Die Journal-Datei wird für ein ROLLBACK verwendet, falls die Transaktion misslingt.
In den Pragma-Optionen von SQLite kann der journal_mode gesetzt werden.
OFF: journal wird nicht erzeugt
MEMORY: journal wird im RAM erzeugt und nicht auf die Platte geschrieben.
Details gibt's hier.

Bei einem NSPersistentDocument muss die configure-Methode für den PersistentStoreCoordinator überschrieben werden:

- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error {
NSMutableDictionary *options = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:@"OFF" forKey:@"journal_mode"] forKey:NSSQLitePragmasOption];
return [super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:options error:error];
}
22.05.2012
Roadrunner42 1 1

Stelle deine Sqlite-Frage jetzt!