web-dev-qa-db-de.com

NSUserDefaults-Fehler in Protokollen

Ich erhalte Fehlermeldungen in Protokollen

 [User Defaults] Failed to write value for key GameId in CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)): Path not accessible, switching to read-only
[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null))

Was verursacht das?

So verwende ich NSUserDefaults:

- (NSString *)gameId
{
    if (_gameId)
        return _gameId;

    _gameId = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameId"];
    return _gameId;
}

- (void)setGameId:(NSString *)aGameId
{
    _gameId = aGameId;
    [[NSUserDefaults standardUserDefaults] setObject:_gameId forKey:@"GameId"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
19

Viele Leute finden dieses Problem auf Xcode 8.

"So verrückt es auch klingen mag, versuchen Sie, das Telefon und den Host neu zu starten. Manchmal kann Xcode aus Summengründen hängen bleiben, nur der Neustart hilft.

wenn Sie mit Xcode 8.1 Beta erstellen, wird dieselbe Warnung angezeigt, aber Sie erhalten auch den Wert. "

referenz: https://forums.developer.Apple.com/thread/51348

28
Tushar

Ich habe einen ähnlichen Fehler erhalten:

[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1700f5f80>

aber es passierte nur, als ich in Xcode eingesteckt war.

Ein Neustart des Geräts hat dieses Problem behoben.

2
Lee Probert

Ich hatte gerade den gleichen Fehler. Der Fehler für mich war, dass ich mehrmals synchronize aufgerufen habe. 

Durch Aufrufen von [userDefaults synchronize] werden nur einmal alle Fehlermeldungen verschwunden.

1
Milander

wenn dieses Problem auftritt, wenn Sie versuchen, Daten mit userDefault auf der Erweiterungs-APP zu speichern, haben Sie möglicherweise folgenden Code geschrieben: [[NSUserDefaults standardUserDefaults] initWithSuiteName: @ "group.xxx.com"]; default userDefault. Der korrekte Code lautet: [[NSUserDefaults Alloc] initWithSuiteName: @ "group.xxx.com"]; http://www.jianshu.com/p/e782104c3bc3

1
H u Y an g

Ich möchte meine Lösung für dieses Problem mitteilen. In meinem Fall war der Fehler ein legitimer Fehler und meine Daten wurden nicht ordnungsgemäß gespeichert. Es stellt sich heraus, dass der Fehler durch ein NSUserDefaults-Speichern von Daten in einer Schleife verursacht wurde. 

Mit "Datensicherung" meine ich das (Pseudocode):

loop{
    [defaults setObject:@"Data" forKey:@"Key"];
    [defaults synchronize];
}

Der Code führt dies also mehrmals sehr schnell aus und verursacht das Problem "Synchronize" kann vermutlich keine gleichzeitigen Aufrufe verarbeiten.

Was zu tun ist, ist:

loop{
    [defaults setObject:@"Data" forKey:@"Key"];
}
[defaults synchronize];

synchronize wird einmal aufgerufen, nachdem alle Objekte gesetzt wurden. 

0
GeneCode

Ich habe gerade die App gelöscht und erneut über Xcode installiert. Verwendung von XCode 8.2.1.

0
sigrem