Objective-C错误异常dropbox

Objective-C错误异常dropbox,objective-c,arrays,exc-bad-access,Objective C,Arrays,Exc Bad Access,我有个问题。以下代码中EXC_BAD_访问的原因在哪里 -(void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata { if(metadata.isDirectory) { db_Path = metadata.path; int i = 0; NSString *fileName = [[NSString alloc] init];

我有个问题。以下代码中EXC_BAD_访问的原因在哪里

-(void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
    if(metadata.isDirectory) {
        db_Path = metadata.path;
        int i = 0;
        NSString *fileName = [[NSString alloc] init];
        for(DBMetadata *file in metadata.contents) {
            fileName = [NSString stringWithFormat:@"%@", file.filename];
            [db_MetaFileNames addObject:file.filename];
            i++;
        }
        [self createMetaListArray];   
        [fileName release];                   
    }
}

-(void)createMetaListArray {
    fileNamesAtDirectory = db_MetaFileNames;
    for (int i=0; i < [fileNamesAtDirectory count]; i++) {
        NSString *filePathWithName = db_directory;

        [filePathWithName stringByAppendingFormat:
            [fileNamesAtDirectory objectAtIndex:i]];

        [filePathsAtDirectory addObject:filePathWithName];
        [filePathWithName release];
   }
}
-(void)restClient:(DBRestClient*)客户端加载的元数据:(DBMetadata*)元数据{
if(metadata.isDirectory){
db_Path=metadata.Path;
int i=0;
NSString*fileName=[[NSString alloc]init];
for(metadata.contents中的DBMetadata*文件){
fileName=[NSString stringWithFormat:@“%@”,file.fileName];
[db_MetaFileNames addObject:file.filename];
i++;
}
[自行创建metalistarray];
[文件名发布];
}
}
-(无效)createMetaListArray{
fileNamesAtDirectory=db_元文件名;
对于(int i=0;i<[fileNamesAtDirectory count];i++){
NSString*filePathWithName=db\u目录;
[filePathWithName stringByAppendingFormat:
[fileNamesAtDirectory objectAtIndex:i]];
[filePathsAtDirectory添加对象:filePathWithName];
[filePathWithName发布];
}
}
这里有人能帮我吗?

这里:

NSString *fileName = [[NSString alloc] init];
for(DBMetadata *file in metadata.contents) {
  fileName = [NSString stringWithFormat:@"%@", file.filename]; 
第一行的
NSString
会被第三行的新值覆盖。原始值泄漏

这意味着:

}
[self createMetaListArray];
[fileName release];   
最后一行中的版本释放的不是上面alloc/init的
文件名
,而是循环中的赋值。你不允许/复制/保留它,所以你不“负责”发布它

在第二个函数中,您也有类似的误解

[filePathWithName stringByAppendingFormat:[fileNamesAtDirectory objectAtIndex:i]];
这不会修改
filePathWithName
。它返回一个新字符串


我建议你仔细阅读一下Cocoa的内存管理规则——你缺少一些基础知识。了解这些会让你的生活更轻松。

删除了我的答案。我不知道db_目录从哪里来。那么,对于echo Mark,它在哪里失败呢?EXC_BAD_访问来自main.m;)