1

私はCoreDataを初めて使用し、データベースから情報をクエリするためのジェネリック関数を作成しようとしています。私はいくつかの問題に直面しています。

NSError*errorというプライベート変数を設定しました。私のコードは次のようになります:

@interface DatabaseHandler ()
{
    NSError * error;
}
@end

-(void)queryCoreDataModel:(NSString*)tableName sortBy:(NSArray *)sortArray{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:tableName];
    request.fetchLimit = 20;
    request.sortDescriptors = sortArray;
    [context executeFetchRequest:request error:&error];
}

それは私にこのエラーを与えます:Passing address of non-local object to __autoreleasing parameter for write-back.

しかし、私がこれを行うとき:

-(void)queryCoreDataModel:(NSString*)tableName sortBy:(NSArray *)sortArray{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:tableName];
    request.fetchLimit = 20;
    request.sortDescriptors = sortArray;
    NSError *error;
    [context executeFetchRequest:request error:&error];
}

エラーは発生しません。なんでそうなの?

4

1 に答える 1

2

インスタンス変数は自動解放できないため、エラー変数をインスタンス変数にすることはできません。エラーパラメータは、リークを回避するために自動解放する必要があります。そのため、ローカル変数が機能します。

于 2013-03-04T03:18:33.390 に答える