将NSManagedObject设置为NSDictionary中的值,给出" escapeString"不承认错误

时间:2013-08-14 13:58:02

标签: ios objective-c nsdictionary nsmanagedobject

我有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];
}

任何想法导致错误?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你得到一个例外:

  

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

因此,您需要设置一个异常断点来了解问题所在。转到Xcode窗口左栏中的断点导航器,按左下角的+,然后选择添加异常断点。重现问题,调试器将停止在发生异常的位置。然后按照堆栈跟踪到你自己的代码,你应该(或者开始)了解异常发生的原因。