2012-01-30 5 views
2

こんにちはevery1は私がメモリリークを起こしているコードです。 私はメモリリークを扱うのが本当に新しいので、単純なバグであっても親切にしてください。私は(1である。このメモリリークの問題「メソッドはNSErrorを受け入れるには、エラーが発生したかどうかを示すために、void以外の戻り値を持たなければならない」と他がNULLポインタのDeDereferenceで取得しています。このコードのエラーが発生したかどうかを示すvoid以外の戻り値が必要です

-(void) parseActivityData:(NSMutableData*) data parseError:(NSError **)error 
{ 
    NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data]; 

    [parser setDelegate:self]; 
    [parser setShouldProcessNamespaces:NO]; 
    [parser setShouldReportNamespacePrefixes:NO]; 
    [parser setShouldResolveExternalEntities:NO]; 

    [parser parse]; 
    NSError *parseError = [parser parserError]; 
    if (parseError && error) { 
     *error = parseError; 
    } 
    [*error retain]; 

    [parser release]; 
} 

変数 'error'から読み込まれます)。

-(BOOL) parseActivityData:(NSMutableData*) data parseError:(NSError **)error 
{ 
    NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data]; 

    [parser setDelegate:self]; 
    [parser setShouldProcessNamespaces:NO]; 
    [parser setShouldReportNamespacePrefixes:NO]; 
    [parser setShouldResolveExternalEntities:NO]; 

    BOOL success = [parser parse]; 
    // only assign error if parser FAILED 
    if(success == NO) 
    { 
     // error should be autoreleased... no need to retain 
     *error = [parser parserError]; 

     // if the above line doesn't work (if error also releases 
     // when you release the parser object), then take out the above 
     // line of code and uncomment this line below: 
     // 
     // *error = [[parser parserError copy]; 
     // 
     // the above line makes a retained copy of the error, which 
     // you must release in the caller. 
    } 
    return success; 
} 
+0

Plzは - (void)parseActivityData:(NSMutableData *)data parseError:(NSError **)error { – MayurCM

答えて

6

は単に要求された何の操作を行います。 おかげ

+0

ありがとうございました。それは私にとってうまくいって、本当に感謝しています。 – MayurCM

0

はこのような何かを試してみてください。 voidの代わりにBOOLを返します。これは、実際にエラーパラメータを使用するときはNOに設定されます。また、[*error retain];もしないでください。

+1

からのコードを考慮していますが、これは "NSErrorを受け入れるメソッドがvoidでない戻り値を持つ必要があります"というエラーを修正しません。 –

+1

あなたは正しいです@Cœur、それを修正するのはかなり簡単でした... –

関連する問題