与NSUserDefaults的QUOT;暂停" /崩溃iOS8上 [英] NSUserDefaults "Pause" / Crash on iOS8

查看:166
本文介绍了与NSUserDefaults的QUOT;暂停" /崩溃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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆