带有NSDictionary的NSCFNumber escapedString Error

时间:2015-05-06 16:15:10

标签: ios objective-c nsstring nsnumber

因此,我在创建NSDictionary时收到此错误:

DLog(@"hiliteID: %@ | regionID: %@", hiliteID, regionID);

if ([hiliteID isKindOfClass:[NSNumber class]]) {
    DLog(@"hititeID is a number");
}
if ([hiliteID isKindOfClass:[NSString class]]) {
    DLog(@"hiliteID is a string");
}
if ([regionID isKindOfClass:[NSNumber class]]) {
    DLog(@"regionID is a number");
}
if ([regionID isKindOfClass:[NSString class]]) {
    DLog(@"regionID is a string");
}

NSDictionary *regionDictionary = [NSDictionary dictionaryWithObject:regionID forKey:hiliteID];
DLog(@"regionDictionary: %@", regionDictionary);

id result = [self.serverCall XMLRPCCall:kSaveHilitedObjects withObjects:@[self.mapContext, regionDictionary]];

记录的内容:

DEBUG | hiliteID: 160399 | regionID: 950
DEBUG | hititeID is a number
DEBUG | regionID is a number
DEBUG | regionDictionary: {
    160399 = 950;
}
DEBUG -[__NSCFNumber escapedString]: unrecognized selector sent to instance 0x7947f5d0
DEBUG *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber escapedString]: unrecognized selector sent to instance 0x7947f5d0'

0x7947f5d0的值为160399,因此为hiliteID

hiliteID是我们服务器返回的值,设置为NSString。我把它投到NSNumber

NSArray *hiliteIDs = [result allKeys];

if ([[hiliteIDs firstObject] isKindOfClass:[NSString class]]) {
    return [NSNumber numberWithInteger:[[hiliteIDs firstObject] integerValue]];
}
else if ([[hiliteIDs firstObject] isKindOfClass:[NSNumber class]]) {
    return [hiliteIDs firstObject];
}

据我所知,我在这里做的事情没有问题。

行:

id result = [self.serverCall XMLRPCCall:kSaveHilitedObjects withObjects:@[self.mapContext, regionDictionary]];

我在代码中使用了这个类几十次,从来没有遇到过问题。

导致错误的原因是什么?

2 个答案:

答案 0 :(得分:1)

reason: '-[__NSCFNumber escapedString]: unrecognized selector sent to instance 0x7947f5d0'

有人试图从NSNumber类调用-escapedString方法,所以看起来问题是你需要NSString时传递NSNumber参数。尝试在NSDictionary中仅使用NSString值。

答案 1 :(得分:1)

无论XMLRPCCall:withObjects:调用无效方法。我建议将此方法的所有输入都放入NSStrings,以便该调用不会内部调用NSNumbers NSNumber无法响应的NSString *regionIDString = [regionID stringValue]; NSString *hiliteIDString = [hiliteID stringValue]; NSDictionary *regionDictionary = [NSDictionary dictionaryWithObject:regionIDString forKey:hiliteIDString]; 上的方法。< / p>

$(document).ready(function() {
$(".im_whiteboard [id*=Next_Update]").on('focusin', function() {
    var div = $('#now'), $this = $(this);
    var top = $this.offset().top + $('input').height() + 5;
    var left = $this.offset().left;
    $this.next().css({'top':top, 'left': left});
    $this.next().fadeIn();
});
$('input').on('focusout', function() {
    $(this).parent().find('#now').fadeOut();
});
$(document).on('click','#now', function() {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!
    var yyyy = today.getFullYear();

    if(dd<10) {
        dd='0'+dd
    } 

    if(mm<10) {
        mm='0'+mm
    } 

    today = mm+'/'+dd+'/'+yyyy;
   $(this).parent().find('input').val(today); 
  });
});