提问者:小点点

试图在目标C中插入非属性值问题[重复]


我已经被这个问题困扰了几个小时,老实说,我找不到解决方法,我试图使用UserDefaults存储NSDictionary,但由于某种原因,它在运行时在main方法崩溃,即使我存储的NSDictionary是UserDefaults的合法类型。

这是我的代码:

-(void)getEventAlbums
{
    NSURL *baseURL = [NSURL URLWithString:[ELConfig getBaseUrl]];
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    NSString *urlString = [NSString stringWithFormat:@"album/getAlbums/%@", [self.mEventData valueForKey:@"eventKey"]];
    [manager POST:urlString parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        
        _albumsDict = [(NSDictionary *)responseObject objectForKey:@"data"];

        [[NSUserDefaults standardUserDefaults] setObject:_albumsDict forKey:@"feedAlbums"];
        
        
        
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        
        // failure
        
        NSLog(@"Error retreiving albums");
        
    }];
}

BTWALBUMSDIC是NSARRAY类型。


共2个答案

匿名用户

检查那个ResponseObject中的所有嵌套数据(在所有数组和字典中)。某处有一些不属于NSArray、NSDictionary、NSString、NSNumber、NSData或NSDate类的东西。通过这种方式,正如您所使用的那样,您只能存储100%的plist兼容数据。

如果您的类支持NSCoding协议,您可以将您的对象转换为NSData,并将其保存在NSUserDefaults中。

匿名用户

此代码可以帮助您检查是否有有效的属性列表:

- (BOOL)isValidPropertyList:(id)object {
    
    NSData      *xmlData;
    NSError     *error;
    
    xmlData=[NSPropertyListSerialization
        dataWithPropertyList:object
        format:NSPropertyListXMLFormat_v1_0
        options:0
        error:&error
    ];
    
    if(xmlData)
    {
        return YES;
    }
    else
    {
        NSLog(@"Tested object is not a valid property list: %@",error);
    }
    
    return NO;
}

添加到您的类中,并使用[self isValidPropertyList:_AlbumsDict];