NSUserDefault如果跟随代表则不保存

时间:2015-01-18 19:19:12

标签: ios objective-c xcode delegates nsuserdefaults

我发现如果在保存到NSUserDefaults后立即执行自定义委托方法,则不会保存数据并显示以下错误:

无法完成操作。 (OSStatus错误-10875。)

上述错误显示在iOS 8下,但未在iOS 7下显示。但是,结果(数据未保存)对两个版本都是通用的。 iOS 7只是没有显示发生错误。此外,这是在模拟器上运行。

仅在写入数据后调用自定义委托时才会出现此问题。如果我删除自定义委托,则写入的数据没有问题。

代码如下:

[self.prefs setObject:self.secondsLabel.text forKey:@"timer"];
[self.prefs setInteger:self.questionTypeControl.selectedSegmentIndex forKey:@"type"];
[self.prefs setBool:self.speedSwitch.on forKey:@"speed"];
[self.prefs setBool:self.mixupSwitch.on forKey:@"switch"];
[self.prefs synchronize];

[self._delegate setupStatus:configChanged withVC:self];
[self dismissViewControllerAnimated:YES completion:nil];

由于“synchronize”返回BOOL,我确实做了检查并确实发现它返回TRUE所以应该保存数据,但同样不是。如果我注释掉委托行,则会正确保存数据。

委托在之前的VC中触发了一个方法。我在该方法的第一行放置了一个断点,但错误已经发生。这让我相信这个问题只是调用方法的行为。有趣的是,如果不使用委托我使用NSNotification,问题就不会出现。

为什么调用委托会导致错误并且无法保存数据?

更新:我确实在实际设备(运行iOS 8.1的iPad)上运行它。我仍然得到与上面提到的完全相同的错误,但是,数据实际上是保存的。因此,SIM和设备会产生相同的错误,但是在SIM卡上它不会保存并且会在设备上保存。同样,只有代表出席时才会这样。

0 个答案:

没有答案