2012-02-02 83 views
0

我想調用一個方法,返回一個對象,需要幫助,因爲我得到一個EXC_BAD_ACCESS時它被調用。我試圖讓QuoteMap對象返回給調用它的ViewController。返回一個對象到一個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]; 

我相信我有一些真正愚蠢的東西錯誤,並會感謝任何方向可能是我的東西。

回答

2

您不需要撥打init您的QuoteMap。它應該是:

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

毫無情況下,你應該叫裸+alloc沒有立即調用某種形式的-init

+0

好真棒,那工作。 – jroyce 2012-02-02 02:36:10

1

你必須初始化QM,而不僅僅是分配內存吧:

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

而且不釋放返回的對象,因爲它是在此之後無效。使它autorelease。

1

更改你的代碼

QuoteMap *qm = [[QuoteMap alloc] init]; 
//your code 
[qm autorelease]; 
return qm; 
相關問題