Возврат объекта в метод в ViewController - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь вызвать метод, который возвращает объект, и мне нужна помощь, поскольку я получаю EXC_BAD_ACCESS при его вызове.Я пытаюсь получить объект QuoteMap, возвращаемый ViewController, который его вызывает.

Метод - addAndReturnQuoteMap, который объявлен в заголовке QuoteMap.h

- (QuoteMap *)addAndReturnQuoteMap:(NSString *)subId withQuoteId:(NSString *)quoteId;

Сам метод выглядит так:

- (QuoteMap *)addAndReturnQuoteMap:(NSString *)subId withQuoteId:(NSString *)quoteId {

//FIRST GET A NEW QUOTE_MAP_ID

NSInteger newQuoteMapId = self.getNextQuoteMapId;
NSLog(@"newQuoteMapId = %d", newQuoteMapId);

// THEN TAKE THE QUOTE_MAP_ID, SUBJECT_ID AND QUOTE_ID AND INSERT INTO QUOTE_MAP TABLE

NSLog(@"subId = %@   quoteId = %@", subId, quoteId);

QuotesAppDelegate *appDelegate = (QuotesAppDelegate *)[[UIApplication sharedApplication] delegate];
FMDatabase *database = [FMDatabase databaseWithPath:appDelegate.getDBPath];    

if ([database open]) {
    [database executeUpdate:@"insert into QUOTE_MAP(quote_map_id, quote_id, subject_id) values(?, ?, ?)", 
     newQuoteMapId, subId, quoteId];

    [database close];
}

[database open];

FMResultSet *result_categories = [database executeQuery:@"select * from QUOTE where quote_id = 835"];
[result_categories next];

QuoteMap *qm = [QuoteMap alloc];
qm.quote_map_id = [result_categories stringForColumn:@"QUOTE_MAP_ID"];
qm.quote_id = [result_categories stringForColumn:@"QUOTE_ID"];
qm.subject_id = [result_categories stringForColumn:@"SUBJECT_ID"];
qm.isDirty = NO;

NSLog(@"QuoteMap inserted the quote_map_id of: %@", qm.quote_map_id);
[qm release];

return qm;

};

Я вызываю метод измой AddQuoteViewController здесь:

    [qm addAndReturnQuoteMap:mySubjectId withQuoteId:quote.quote_id];

Я уверен, что есть что-то действительно глупое, что я делаю неправильно, и был бы признателен за любые указания на то, что это может меня сделать.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Вы не звоните init на свой QuoteMap.Это должно быть:

QuoteMap *qm = [[QuoteMap alloc] init];

Ни в одном случае вы не должны вызывать голый +alloc без немедленного вызова какой-либо формы -init.

1 голос
/ 02 февраля 2012

Измените свой код на

QuoteMap *qm = [[QuoteMap alloc] init];
//your code
[qm autorelease];
return qm;
1 голос
/ 02 февраля 2012

Вам нужно инициализировать qm, а не просто выделять для него память:

QuoteMap *qm = [[QuoteMap alloc] init];

И не освобождать возвращаемый объект, потому что после этого он недействителен.Сделай авто-релиз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...