0

我有一个NSManagedObject存储一些数据的。我将该数据转换为NSDictionary通过 XML 上传到我们的服务器的数据。如果成功,服务器将回复我需要更新的信息NSManagedObject

我的想法是在中添加NSManagedObjectNSDictionary以便我可以轻松参考它。问题是当我尝试通过我的 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]];

Year 是 a NSNumber,dictionaries 是字典数组。

以下是服务器调用的方式:

-(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];
}

任何想法是什么导致错误?

4

2 回答 2

0

向字典添加额外数据的问题在于 XML 序列化程序将尝试处理它。为避免您希望将托管对象(或其标识符)存储在其他地方。这可能在另一个属性/数组/字典中。或者,您可以使用关联对象 ( objc_setAssociatedObject)。

于 2013-08-14T14:31:46.717 回答
0

你得到一个例外:

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Scouting escapedString]:无法识别的选择器发送到实例 0x2297f8d0”

所以需要设置异常断点来了解问题出在哪里。转到 Xcode 窗口左栏中的断点导航器,按左下角的 +,然后选择Add Exception Breakpoint。重现问题,调试器会停在异常发生的位置。然后按照堆栈跟踪一直到您自己的代码,您应该已经(或开始)了解异常发生的原因。

于 2013-09-28T23:52:37.297 回答