ios - 为什么返回函数会发出SIGABRT信号?

标签 ios objective-c memory-management error-handling xcode4

我对 objective-c 不熟悉。
我不明白为什么我的函数无法正常工作,它会在函数返回时导致SIGBART错误。

+ (NSArray*) jsonToArray:(NSString*)jsonString
{
    id mappedObj = nil;
    RKObjectMappingProvider* mapProv = [[RKObjectMappingProvider alloc] init];

    RKObjectMapping* answerMapping = [SMAnswersWrapper entityMappingForSerializer];
    answerMapping.objectClass = [NSMutableDictionary class];

    [mapProv setSerializationMapping:answerMapping forClass:[SMAnswersWrapper class]];
    RKObjectMapping *proofsEntityMapping = [SMEntityArrayWrapper entityMappingWithContentMapping:answerMapping];

    [mapProv setMapping:proofsEntityMapping forKeyPath:@""];

    if (jsonString)
    {
        id obj = [jsonString objectFromJSONString];
        if (obj)
        {
            RKObjectMapper* mapper = [[RKObjectMapper alloc] initWithObject:obj mappingProvider:mapProv];

            RKObjectMappingResult* res = [mapper performMapping];
            mappedObj = [res asCollection];

            [mapper release];
        }
    }
    [mapProv release];
    return [[[mappedObj content] retain] autorelease];
}

错误位置在此行:

return [[[mappedObj content] retain] autorelease];



谢谢。

编辑

我发现我的错误,我无法访问我必须强制转换mapdObj的[[[mappedObj content] retain] autorelease];的内容。

最佳答案

尝试以下操作:

+ (NSArray*) jsonToArray:(NSString*)jsonString
{
    id mappedObj = nil;
    RKObjectMappingProvider* mapProv = [[RKObjectMappingProvider alloc] init];

    RKObjectMapping* answerMapping = [SMAnswersWrapper entityMappingForSerializer];
    answerMapping.objectClass = [NSMutableDictionary class];

    [mapProv setSerializationMapping:answerMapping forClass:[SMAnswersWrapper class]];
    RKObjectMapping *proofsEntityMapping = [SMEntityArrayWrapper entityMappingWithContentMapping:answerMapping];

    [mapProv setMapping:proofsEntityMapping forKeyPath:@""];

    if (jsonString)
    {
        id obj = [jsonString objectFromJSONString];
        if (obj)
        {
            RKObjectMapper* mapper = [[RKObjectMapper alloc] initWithObject:obj mappingProvider:mapProv];

            RKObjectMappingResult* res = [mapper performMapping];
            mappedObj = [res asCollection];

            [mapper release];
        }
    }
    [mapProv release];
    if (mappedObj)
    {
        return [[[mappedObj content] retain] autorelease];
    }
    return [NSArray array];

}

在您的代码中,如果jsonStringobj为nil,则不会初始化mappingObj。这种情况可能会导致访问[mappedObj content]时崩溃。

试试这个,对您有帮助。

关于ios - 为什么返回函数会发出SIGABRT信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502355/

相关文章:

iOS 支持第三方导航

ios - 2 个堆叠的多点触控 CCLayers

MySQL 导入 - [大文件 ~ 350 GB] - 两周且仍在运行

ios - UIView 上的 UIStoryboard 约束

ios - 如何在 iOS 10 中将 textView 的高度存储在数组或字典中

ios - 为 ios 8.1 设计的应用程序会自动在 ios 8.2 上运行吗?

c++ - 如何在不丢失 OOP 的情况下使对象在内存中连续?

ios - 复杂的 Storyboard导航

IOS:一次管理一些 View Controller 并退出

c - 使用 realloc 缩小结构内的字符串