我試圖修復當我訪問tableView:cellForRowAtIndexPath:indexPath中的NSMutableDictionary時引發的EXC_BAD_ACCESS錯誤。現在,它的工作原理,當我填寫ridesDict與方法loadHistoryFromDBExtended像這樣:NSMutableDictionary導致EXC_BAD_ACCESS
self.ridesDict = [self loadHistoryFromDBExtended];
NSLog(@"rides dict %@", self.ridesDict);
不過,我不想叫[自我loadHistoryFromDBExtended]對於每一個細胞都被加載,因爲字典也不會改變,所以我嘗試移動:
self.ridesDict = [self loadHistoryFromDBExtended];
到viewDidLoad中,現在我得到EXC_BAD_ACCESS錯誤,當我使用:
NSLog(@"rides dict %@", self.ridesDict);
中的tableView
:的cellForRowAtIndexPath:indexPath。從我看過的內容看來,我有一些內存保留/釋放問題,但我似乎無法弄清楚。在loadHistoryFromDBExtended方法被調用後,我嘗試在viewDidLoad中使用[self.ridesDict retain],但這並沒有幫助。我對此非常陌生,所以我很欣賞任何指向哪裏。
編輯:這裏是loadHistoryFromDBExtended方法:
-(NSMutableDictionary *)loadHistoryFromDBExtended
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
FMDatabase* db = [FMDatabase databaseWithPath:[self getDBPath]];
if (![db open])
{
NSLog(@"Could not open db.");
[pool release];
}
//get users
FMResultSet *rs = [db executeQuery:@"SELECT * FROM R order by date desc"]; //query provides result set
//create result array
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
while ([rs next])
{
NSMutableArray *usersDictArray = [NSMutableArray array];
//look up names for id's
[usersDictArray addObject:[rs stringForColumn:@"rNames"]];
[usersDictArray addObject:[rs stringForColumn:@"dName"]];
[usersDictArray addObject:[rs stringForColumn:@"date"]];
[myDictionary setObject:usersDictArray forKey:[rs stringForColumn:@"rID"]];
[usersDictArray release];
}
//return usersArray;
return myDictionary;
[myDictionary release];
[pool drain];
}
'loadHistoryFromDBExtended'是否返回調用者擁有的對象? 「ridesDict」的聲明是什麼?這是一個財產嗎?如果是這樣,它是「保留」還是「複製」屬性?您是否在爲該屬性使用合成訪問器,或者是否實施了自定義訪問器? – 2011-05-02 03:14:39
loadHistoryFromDBExtended返回在該方法中聲明的myDictionary。 ridesDict在接口和@property中聲明(nonatomic,retain)NSMutableDictionary * ridesDict;在.h然後@synthesize ridesDict;在.m – 2011-05-02 15:56:36