我试图修复当我访问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