与NSUserDefaults的QUOT;暂停" /崩溃iOS8上 [英] NSUserDefaults "Pause" / Crash on iOS8
问题描述
好了,我上周推出一个应用程序iOS8上出来之前。一切工作正常在iOS7及以下。但现在因为人们已经更新到iOS8上我的应用程序被暂停/崩溃没有理由。
我来而言,这是当我设置一个NSMutableArray到NSUserDefaults的,它会暂停。
请注意,是NSMutableArray里的NSString的数组。
但(这是奇怪的),如果我断点通过$ C $跳过步骤c它的工作原理和我没有得到任何的停顿。
下面是它吹起来的功能...
- (无效)UpdateMyAgenda:(* NSString的)的SessionID删除:(BOOL){删除如果(!删除){
//不要删除 * NSUserDefaults的preFS = [NSUserDefaults的standardUserDefaults]
_MyAgenda = [[NSMutableArray里的alloc]初始化];
_MyAgenda = [preFS mutableArrayValueForKey:@MyAgenda]; [_MyAgenda ADDOBJECT:的SessionID]; [preFS的setObject:_MyAgenda forKey:@MyAgenda]; [preFS同步]。}其他{
//去掉 * NSUserDefaults的preFS = [NSUserDefaults的standardUserDefaults] _MyAgenda = [[NSMutableArray里的alloc]初始化];
_MyAgenda = [preFS mutableArrayValueForKey:@MyAgenda]; [_MyAgenda的removeObject:的SessionID]; [preFS的setObject:_MyAgenda forKey:@MyAgenda]; [preFS同步]。}对于(的NSString *在_MyAgenda项){
的NSLog(@%@,项目);
}的NSLog(@-----------);
}
好了,所以这里的交易,或者现在修复。它看起来像设置在播放器preFS一个可变数组是打破,但设置一个NSArray是没有的。
所以你的数组转换为一个可变的,添加对象,那么你的可变数组转换为一个NSArray,然后设置用户默认设置。
下面是一个例子....
* NSUserDefaults的preFS = [NSUserDefaults的standardUserDefaults]
NSArray的* ARR = preFS arrayForKey:@MyAgenda]; _MyAgenda = [NSMutableArray的arrayWithArray:ARR];
[_MyAgenda ADDOBJECT:的SessionID]; ARR = [NSArray的arrayWithArray:_MyAgenda]; [preFS的setObject:ARR forKey:@MyAgenda];
[preFS同步]。
Ok, so I launched an app last week before iOS8 came out. Everything was working fine in iOS7 and below. But now since people have updated to iOS8 my app is pausing/crashing for no reason.
I came to terms that it is when I set an NSMutableArray to the NSUserDefaults, it pauses.
Please note, the NSMutableArray is an array of NSStrings.
BUT (this is weird) if I breakpoint skip through the code it works and I get no pause.
Here is the function that it is blowing up...
-(void)UpdateMyAgenda:(NSString*)SessionID Remove:(BOOL)Remove{
if(!Remove){
//Do not Remove
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
_MyAgenda = [[NSMutableArray alloc]init];
_MyAgenda = [prefs mutableArrayValueForKey:@"MyAgenda"];
[_MyAgenda addObject:SessionID];
[prefs setObject:_MyAgenda forKey:@"MyAgenda"];
[prefs synchronize];
}else{
//Remove
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
_MyAgenda = [[NSMutableArray alloc]init];
_MyAgenda = [prefs mutableArrayValueForKey:@"MyAgenda"];
[_MyAgenda removeObject:SessionID];
[prefs setObject:_MyAgenda forKey:@"MyAgenda"];
[prefs synchronize];
}
for (NSString *item in _MyAgenda) {
NSLog(@"%@", item);
}
NSLog(@"-----------");
}
Ok so here is the deal, or a fix for now. It looks like setting a mutable array in the player prefs is breaking, but setting an NSArray is not.
So convert your array to a mutable one, add the object, then convert your mutable array to an nsarray and then set the user default.
Here is an example....
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSArray *arr = [prefs arrayForKey:@"MyAgenda"];
_MyAgenda = [NSMutableArray arrayWithArray:arr];
[_MyAgenda addObject:SessionID];
arr = [NSArray arrayWithArray:_MyAgenda];
[prefs setObject:arr forKey:@"MyAgenda"];
[prefs synchronize];
这篇关于与NSUserDefaults的QUOT;暂停" /崩溃iOS8上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!