EXC_BAD_ACCESS和stringByAppendingString

时间:2012-08-20 09:00:28

标签: ios sqlite nsstring exc-bad-access

使用在名为DataHelper的类中定义的以下函数返回的值设置标签时获取EXC_BAD_ACCESS(此处完成所有数据库处理):

+(NSString *)getCurrentBalanceAndType:(NSString *)account
{
    sqlite3_stmt *statement=NULL;
    float bal=0;
    NSString *type=NULL, *balance_type=NULL;
    //String decimalFormat="%.2f";
    statement = [DataHelper getDetailsFromAccountBal:account:[DataHelper currentMonth]];
    if (sqlite3_step(statement) == SQLITE_ROW)
    {
        bal = sqlite3_column_double(statement,2);
        type = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
    } 
    sqlite3_finalize(statement);

    NSString *stringBal=[NSString stringWithFormat:@"%.2f", bal];
    type=[[type uppercaseString] stringByAppendingString:@"r"];
    balance_type=[[stringBal stringByAppendingString:@" "]stringByAppendingString:type];
    [type release];
    return balance_type;
}

这是我在viewDidLoad中设置标签的方式:

 lbCreditCurrBal.text=[DataHelper getCurrentBalanceAndType:@"Some Text"];

请帮忙。

2 个答案:

答案 0 :(得分:1)

您过度释放type。删除[type release];。并使用ARC来避免这种错误。

答案 1 :(得分:1)

当您调用以init或copy之外的任何内容开头的方法时,您将返回一个将在以后某个时间点自动释放的对象。 reference- ray's memory management blog

记住这一点我认为你不应该发布尼古拉所说的类型对象。