Я использую Утечки, и я считаю, что сузил проблему, и я уверен, что моя неопытность как-то связана с этим.Если вы видите ошибку в моей логике (например, есть, очевидно, более простой способ сделать это), пожалуйста, дайте мне знать.
В этом случае мы работаем с 3 классами, классом Row, который описывает строкив базе данных, класс Database, который содержит функции getRow, insertRow и класс ViewController.
внутри Row.h:
@interface Row : NSObject {
int rowID;
NSString *FirstName;
NSString *LastName;
}
@property (nonatomic) int rowID;
@property (nonatomic, retain) NSString *FirstName; <--see comments below
@property (nonatomic, retain) NSString *LastName; <--see comments below
@end
Надеюсь, это довольно очевидно, создает объектчто я собираюсь выдвинуть данные, которые я извлекаю из базы данных.
внутри Database.m
-(Row *) getRow {
NSLog(@"Inside getRow");
Row *holder = [[[Row alloc] init] autorelease];
...All the SQL stuff... (Select * from table where id = 1), etc.
char *first = (char *)sqlite3_column_text(statement, 1);
char *last = (char *)sqlite3_column_text(statement, 2);
holder.rowID = sqlite3_column_int(statement, 0);
holder.FirstName = [NSString stringWithUTF8String:first];
holder.LastName = [NSString stringWithUTF8String:last];
return holder;
}
Кроме того, надеюсь, что это довольно очевидно.Получить конкретную строку из базы данных, поместить информацию в объект Row (см. Row.h).
внутри ViewController.m
-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
dataB = [[Database alloc] init];
[dataB openDB];
currentRow = [[dataB getRow] retain]; <--See comments below.
firstNameLabel.text = currentRow.FirstName;
}
-(IBAction)btnGetLastName:(id)sender{
lastNameLabel.text = currentRow.LastName; <--See comments below.
[currentRow release];
currentRow = [dataB getRow];
}
По сути, здесь контроллер представления дает вам первоеимя, и когда вы нажимаете на кнопку, она отображает фамилию.
Итак, у меня течь, и я сузил его до каждого нажатия кнопки btnGetLastName.Если я не сохраняю
currentRow = [[dataB getRow] retain];
, я вылетаю в
lastNameLabel.text = currentRow.LastName;
(сообщение отправлено на освобожденный экземпляр).
Я бью себя по головеПару дней на этом, и я действительно хотел бы двигаться вперед отсюда, поэтому, если кто-то может предложить помощь, это будет очень цениться.Я также скажу, что это был опыт обучения, поэтому в некоторых случаях, если вам нужно спросить: «Зачем вы это сделали?»ответ может быть "потому что я тупой".Надеюсь, проблема здесь очевидна для кого-то.