Belgelerin şu olduğunu söylediğini biliyorum ve bu konunun zaten tartışılmakta olduğunu biliyorum ancak ilginç bir yığın sonucum var ve başka hiçbir şey yapamam, ancak bu [NSUserDefaults standardUserDefaults]
threadafe değildir. Yani benim kilitlenme günlüğünüzü yayınlayıp umut olacağı birileriNSUserDefaults threadafe
Konu
...
libdispatch.dylib 0x3ab53d67 _dispatch_client_callout + 23
libdispatch.dylib 0x3ab65e73 _dispatch_barrier_sync_f_invoke + 27
CoreFoundation 0x302b470d CFPreferencesAppSynchronize + 265
Foundation 0x30151b01 -[NSUserDefaults(NSUserDefaults) synchronize] + 25
MyApp 0x0009df8b -[AppDelegate applicationDidEnterBackground:] (AppDelegate.m:178)
...
MyApp 0x0005344b main (main.m:17)
MyApp 0x000533f8 start + 40
yığının
...
CoreFoundation 0x302bc13f _CFXPreferencesSetValue + 107
CoreFoundation 0x302bc039 CFPreferencesSetAppValue + 41
Foundation 0x30c76935 -[NSUserDefaults(NSUserDefaults) setObject:forKey:] + 61
MyApp 0x000b2e9d -[AppData parserDidEndDocument:] (AppData.m:1013)
...
Parçaları edilmiş bazı iplik Çöktü Yapamam ... şey görür kesildi ve "..." ile değiştirildi, çünkü konu için çok uzun ve ilgisiz. Uygulama mesajla çöker:
* Koleksiyon < __NSDictionaryM: 0x15a04ae0> sayılan olurken mutasyona uğratıldı. ....
Kodu: AppDelegate: -> crached iplik ...
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[NSUserDefaults standardUserDefaults] synchronize];
}
sınıfının: -> ikinci thread:
-(void)parserDidEndDocument:(NSXMLParser *)parser {
...
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"savedStations"];
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"lastUpdateDate"];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyLoaded"];
...
}
Ben çiftin bu çökme var Diğer durumlarda, her zaman bir iş parçacığında kullanıcı varsayılanlarına bazı yazma ve kilitlenen diğer iş parçacığı eşitleme içerir .. Herkes başka bir açıklama varsa çok iyi olurdu ...
https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html. – trojanfoe
'NSUserDefaults'daki her değişiklikten sonra ve kodunuzdan' synise 'çağırmanız gerekiyor, ikinci thread bunu çağırmıyor. – danypata
@danypata Bunu neden yapmak zorundasınız? – trojanfoe