我有NSManagedObject
存储一些数据。我将该数据转换为NSDictionary
以通过XML上传到我们的服务器。如果成功,服务器将回复,并且我需要使用。{/ p>更新NSManagedObject
我的想法是在NSManagedObject
中添加NSDictionary
,以便我轻松引用它。问题是当我尝试通过我的XMLRPC上传它时,它给了我错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Scouting escapedString]: unrecognized selector sent to instance 0x2297f8d0'
我没有任何名为escapedString
的内容,所以我对正在发生的事情感到迷茫。无论我指定为NSManagedObject
的类型,都会发生这种情况。
代码:
id result = [self.serverCall XMLRPCCall:API_SAVE_OBJECT withObjects:@[year, dictionaries]];
年份是NSNumber
,词典是一系列词典。
以下是服务器调用的方式:
-(id)XMLRPCCall:(NSString *)methodName withObjects:(NSArray *)parametersArray
{
NSString *authServer = [NSString stringWithFormat:@"%@?idtoken=%@", self.API, self.IDToken];
XMLRPCRequest *requestCall = [[XMLRPCRequest alloc] initWithURL:[NSURL URLWithString:authServer]];
[requestCall setMethod:methodName withParameters:parametersArray];
[requestCall setTimeoutInterval:10];
return [self executeXMLRPCERequest:requestCall];
}
-(id)executeXMLRPCERequest:(XMLRPCRequest *)request {
[UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;
[[NSNotificationCenter defaultCenter] postNotificationName:@"DisableOfflineButton" object:nil];
NSError *myError;
XMLRPCResponse *serverResponse = [XMLRPCConnection sendSynchronousXMLRPCRequest:request error:&myError];
if (myError) {
NSLog(@"myError: %@ [myError userInfo]: %@", myError, [myError userInfo]);
[[NSNotificationCenter defaultCenter] postNotificationName:NETWORK_ERROR object:nil];
return NETWORK_ERROR;
}
[UIApplication sharedApplication].networkActivityIndicatorVisible = FALSE;
[[NSNotificationCenter defaultCenter] postNotificationName:@"EnableOfflineButton" object:nil];
if ([[serverResponse object] isKindOfClass:[NSDictionary class]]
&& [[serverResponse object] objectForKey:FAULT_CODE]) {
DLog(@"fault code found");
if ([[[serverResponse object] objectForKey:FAULT_STRING] isEqualToString:@"Token is not valid. Destroying token."]) {
DLog(@"invalid token");
self.IDToken = nil;
self.API = nil;
[self.delegate forceLogout];
}
}
else {
Defaults *defaults = [Defaults MR_findFirst];
defaults.tokenIDDate = [NSDate date];
}
return [serverResponse object];
}
任何想法导致错误?
答案 0 :(得分:0)
向字典添加额外数据的问题是XML序列化程序将尝试处理它。为了避免您想要将托管对象(或其标识符)存储在其他位置。这可能在另一个属性/数组/字典中。或者,您可以使用关联对象(objc_setAssociatedObject
)。
答案 1 :(得分:0)
你得到一个例外:
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:' - [Scouting escapedString]: 无法识别的选择器发送到实例0x2297f8d0'
因此,您需要设置一个异常断点来了解问题所在。转到Xcode窗口左栏中的断点导航器,按左下角的+,然后选择添加异常断点。重现问题,调试器将停止在发生异常的位置。然后按照堆栈跟踪到你自己的代码,你应该(或者开始)了解异常发生的原因。