因此,我在创建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]];
我在代码中使用了这个类几十次,从来没有遇到过问题。
导致错误的原因是什么?
答案 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);
});
});