【问题标题】:Why return on function make a SIGBART signal?为什么返回函数会发出 SIGBART 信号?
【发布时间】:2015-08-10 17:06:58
【问题描述】:

我是目标 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];

谢谢。

编辑

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

【问题讨论】:

  • 检查主文件并检查UIApplicationMain是否正常。否则在代码上放置断点并检查错误位置。
  • 同样在[mapProv setMapping:proofsEntityMapping forKeyPath:@""]; 中,您需要提供正确的密钥路径“Key”值。
  • 我也真的建议你搬到ARC
  • UiapplicationMain 没问题,[mapProv setMapping:proofsEntityMapping forKeyPath:@""]; 它可以工作,因为我检查了序列化数据,唯一的问题是当我返回数组时,我已经放置了断点,错误位置是return [[[mappedObj content] retain] autorelease]; 谢谢
  • 抱歉 rckoenes 我不明白“移至ARC”是什么意思? 编辑好的,我在谷歌上搜索,我明白你的意思我要尝试搬到 ARC

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


【解决方案1】:

尝试以下:

+ (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,mappedObj 将不会被初始化。这种情况可能会导致访问[mappedObj content]时崩溃。

试试这个,对你有帮助.....

【讨论】:

  • 谢谢,我已经发现了错误,如果不投射我的对象,我将无法访问内容。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-07
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多