J'ai écrit une fonction pour renvoyer une chaîne à un chemin de répertoire. J'obtiens un EXC_BAD_ACCESS et je pense que cette fonction est la cause. Ai-je besoin de conserver le nsstring ou quelque chose?obtenir un EXC_BAD_ACCESS lors de l'attribution d'un NSString
-(void) getRemoteFiles:(NSMutableArray *) M
{
[self createFileToAppDirectory];
if (!networkqueue) {
networkqueue:[[[ASINetworkQueue alloc] init] autorelease];
}
[[self networkQueue] cancelAllOperations];
[self setNetworkQueue:[ASINetworkQueue queue]];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)];
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)];
int i;
for (i=0; i<[M count]; i++) {
NSString *url=[M objectAtIndex:i];
NSString* theFileName = [url lastPathComponent];
NSString *safestring=[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if ([theFileName isEqualToString:@"nothing"]==NO) {
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:safestring]];
//think this is causing the problem
NSString *savepath=[self getDirectoryPathForFileName:theFileName];
//[request setDownloadDestinationPath:savepath];
[[self networkQueue] addOperation:request];
}
}
[[self networkQueue] go];
//error thrown after this point
}
-(NSString *)getDirectoryPathForFileName:(NSString *)filename
{
NSFileManager *filemgr;
NSArray *dirPaths;
NSString *docsDir;
NSString *newDir;
BOOL isDir;
filemgr =[NSFileManager defaultManager];
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
newDir = [docsDir stringByAppendingPathComponent:@"remix_data"];
if ([filemgr fileExistsAtPath:newDir isDirectory:&isDir]==NO) {
NSLog(@"dir should exist but does not... go funt dat");
}
NSString *localFilePath = [newDir stringByAppendingPathComponent:filename];
[filemgr release];
[docsDir release];
[newDir release];
return localFilePath;
}
Vous ne faites pas alloc/init sur filemgr, docsDir et newDir. Alors pourquoi les libérez-vous? –
J'apprends encore sur la gestion de la mémoire et le code vient d'un exemple. Je suppose que l'exemple est faux? – dubbeat