开发者

EXC_BAD_ACCESS when using @synthesize

开发者 https://www.devze.com 2023-02-20 04:13 出处:网络
.h file #import <UIKit/UIKit.h> #import \"Tardies.h\" #import \"DBAccess.h\" @interface TardiesViewController : UITableViewController

.h file

#import <UIKit/UIKit.h>
#import "Tardies.h"
#import "DBAccess.h"

@interface TardiesViewController : UITableViewController
<UITableViewDelegate, UITableViewDataSource, UIPrintInteractionControllerDelegate> {
    NSMutableArray *tardiesAry;
    UITableView *table;
}

@property (nonatomic, retain) NSMutableArray *tardiesAry;
@property (nonatomic, retain) IBOutlet UITableView *table;

@end

.m file

#import "TardiesViewController.h"


@implementation TardiesViewController

@synthesize tardiesAry;
@synthesize table;

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    DBAccess *dbAccess = [[DBAccess alloc] init];
    self.tardiesAry = [dbAccess getTardies];
    [dbAccess closeDatabase];
    [dbAccess release];
    [table reloadData];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    self.tardiesAry = nil;
}


- (void)dealloc {
    [tardiesAry release];
}

@end

- (NSMutableArray *) getTardies
{   
//  [self deleteFromTardies:@""];
NSLog (@"DBAccess - getTardies - 1");
NSMutableArray *tardies = [[[NSMutableArray alloc] init] autorelease];

const char *sql = "SELECT tardies.studentId, tardyDate, tardyTime, lastName, firstName, middleName FROM tardies LEFT JOIN students ON tardies.studentId = students.studentId ORDER BY tardyDate desc, tardyTime desc, lastName, firstName, middleName";

sqlite3_stmt *statement;

int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL);

if ( sqlResult == SQLITE_OK)
{
    NSLog (@"DBAccess - getTardies - 6");
    while (sqlite3_step(statement) == SQLITE_ROW )
    {
        Tardies *tardy = [[Tardies alloc] init];

        char *stuId = (char *) sqlite3_column_text(statement, 0);
        char *trdyDate = (char *) sqlite3_column_text(statement, 1);
        char *trdyTime = (char *) sqlite3_column_text(statement, 2);
        char *lName = (char *) sqlite3_column_text(statement, 3);
        char *fName = (char *) sqlite3_column_text(statement, 4);
        char *mName开发者_如何学Go = (char *) sqlite3_column_text(statement, 5);

        tardy.studentId = (stuId) ? [NSString stringWithUTF8String:stuId] : @" ";
        tardy.tardyDate = (trdyDate) ? [NSString stringWithUTF8String:trdyDate] : @" ";
        tardy.tardyTime = (trdyTime) ? [NSString stringWithUTF8String:trdyTime] : @" ";

        NSString *lNm = (lName) ? [NSString stringWithUTF8String:lName] : @" ";
        NSString *fNm = (fName) ? [NSString stringWithUTF8String:fName] : @" ";
        NSString *mNm = (mName) ? [NSString stringWithUTF8String:mName] : @" ";
        tardy.fullName = [NSString stringWithFormat:@"%@, %@ %@", lNm, fNm, mNm];

        NSDictionary *tardyDict = [[NSDictionary alloc] initWithObjectsAndKeys:tardy.studentId, @"studentId", 
                                   tardy.tardyDate, @"tardyDate",
                                   tardy.tardyTime, @"tardyTime",
                                   tardy.fullName, @"fullName",
                                   nil];
        [tardies addObject:tardyDict];

        [tardy release];
        [tardyDict release];
    }
    //  Finalize the statement to release its resources
    sqlite3_finalize(statement);        
}
else 
{
    NSLog (@"Problem with the database:");
    NSLog (@"%d", sqlResult);
}
return tardies;
}

- (void) closeDatabase
{
    //  Close the database
    if (sqlite3_close(database) != SQLITE_OK) 
    {
    //  NSAssert1(0, @"Error: failed to close database: '%s' .", sqlite3_errmsg(database));
    } 
}

Xcode Version 4.0 Build 4A304a

The first time the setTardiesAry runs, it is fine, the second time, the program fails on the @synthesize tardiesAry line with error: Thread 1: Program received signal "EXC_BAD_ACCESS".

I tried overriding the method setTardiesAry, failed in that method instead of the @synthesize line instead.

Please help, I have no idea how to continue.

It was had an autorelease in getTardies.


modify

here with ur dealloc

- (void)dealloc {

    [self.tardiesAry release];

}
0

精彩评论

暂无评论...
验证码 换一张
取 消