Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果后跟委托,则NSUserDefault不保存_Ios_Objective C_Xcode_Delegates_Nsuserdefaults - Fatal编程技术网

Ios 如果后跟委托,则NSUserDefault不保存

Ios 如果后跟委托,则NSUserDefault不保存,ios,objective-c,xcode,delegates,nsuserdefaults,Ios,Objective C,Xcode,Delegates,Nsuserdefaults,我发现,如果在保存到NSUserDefaults后立即执行自定义委托方法,则不会保存数据,并显示以下错误: 无法完成该操作。(OSStatus错误-10875)。 上述错误在iOS 8下显示,但在iOS 7下不显示。但是,结果(数据未保存)对两个版本都是通用的。iOS 7只是没有显示发生了错误。而且,这是在模拟器上运行的 只有在写入数据后调用自定义委托时,才会出现此问题。如果删除自定义委托,则数据写入时不会出现任何问题 代码如下: [self.prefs setObject:self.secon

我发现,如果在保存到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卡上不会保存,在设备上会保存。同样,这仅在代表在场的情况下发生。

1。为什么要命名代表?(分数不足)。2.在setupStatus方法中,如果您注释掉所有代码,看看仅仅调用委托是否会给您带来问题?关于委托,这只是我这里的命名约定。如前所述,我在委托方法的第一行设置了一个断点,但问题仍然存在。因此,这不是该方法本身所做的任何事情。只需调用代理就足以引起问题。