由于将空字符串添加到字典而导致应用程序崩溃

时间:2015-11-16 11:01:42

标签: ios swift swift2

func addSongToQueue(){
        let post = [
            "data": [
                "QueueId": MyViewState.selectedQueId,
                "track":[
                    [
                        "title":selectedTrack.title,
                        "stream_url":  selectedTrack.stream_url,
                        "userName"  :  selectedTrack.userName,
                        "artWorkURL":  selectedTrack.artWorkURL,
                        "userAvatar":  selectedTrack.userAvatar,
                        "trackID"   :  selectedTrack.trackID,
                        "duration"  :  selectedTrack.duration
                    ]]]
        ]

跟踪获取代码:

-(instancetype) initWithDictionary: (NSDictionary*) SCTrackDict {
    self = [self init];
    if (self) {
        self.title = SCTrackDict[@"title"];
        self.stream_url = SCTrackDict[@"stream_url"];
        self.userDict = SCTrackDict[@"user"];
        self.userName = self.userDict[@"username"];
        self.artWorkURL = SCTrackDict[@"artwork_url"];
        self.trackID = SCTrackDict[@"id"];
        self.userAvatar = self.userDict[@"avatar_url"];
        self.duration = SCTrackDict[@"duration"];

    }
    return self;
}

将数据解析为曲目:

+(NSMutableArray *) parseJSONData: (NSData *) JSONData {
    NSError* error;
    NSMutableArray* SCTrackArray = [NSMutableArray new];

    NSArray *JSONArray= [NSJSONSerialization JSONObjectWithData:JSONData options:0 error: &error];
    if ([JSONArray isKindOfClass:[NSArray class]]) {
        for (NSDictionary* trackDict in JSONArray) {
            SCTrack* trackObject = [[SCTrack alloc]initWithDictionary:trackDict];
            //Need to print out trackDict to see JSON dictionary
            [SCTrackArray addObject:trackObject];
        }
    }
    return SCTrackArray;
}

如果NSNull在那里,我如何添加“”(空字符串),并且因为它是长值而在trackid上崩溃。

在添加dict之前,是否可以在不检查个别密钥的情况下修改此代码?

3 个答案:

答案 0 :(得分:0)

向自己澄清:如果您期望的密钥不存在,或者[NSNull为空],或者是空字符串,或者您希望字符串等是字典,那么您想要采取什么操作?等等。

一旦您自己解释了这一点,就可以相应地编写代码。现在看来你的代码遵循规则“如果它不在那里,我会崩溃”。

答案 1 :(得分:0)

在添加对象之前,只需检查这是否为null

if(yourObject isEqual:(id)[NSNUll null])
{
    // Then do nothing
}

答案 2 :(得分:-1)

您可以使用以下内容:

"stream_url":  selectedTrack.stream_url != nul ? selectedTrack.stream_url : @"";

希望有所帮助。

您可以阅读三元操作