0

私のtableViewControllerには、この種のコードがあります(ここでは簡略化されています):

-(void)saveOnDatabase{

//here I set up NSManagedObjectContext and everything


[[[array objectAtIndex:1] objectForKey:@"tableLabels"] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

    if (obj==solvent) {
        [pepe setValue: [self numberFromText:delta :2] forKey:obj];
    }else {
        [pepe setValue: nil forKey:obj];
    }

}];


}

それは正常に動作し、私が期待したことを行います。ただし、コードをクリーンに保つために、NSObject のサブクラスであるモデルからこのコードを実行し、すべての計算と UI とは関係のないすべてのことを行います。問題は、モデル Class に実装しようとすると、次のようなエラーが発生することです。Incompatible block pointer types sending 'int((^))(void)' to parameter of type 'void (^)(__strong id, NSUInteger, BOOL*)'

ブロックは次のようなメソッド内に含まれています。

-(void)saveCustomToDatabase:id  withContext:(NSManagedObjectContext*)context withImpurity:(NSString*)impurity  withDelta:(NSString *)delta ... // the rest

必要なすべてのパラメーターを渡すことを考慮して、ここで何が行われているのか、なぜ他のクラスでコンパイルされないのかはよくわかりません...

完全な方法はまさにこれです:

-(void)saveCustomToDatabase:id  withContext:(NSManagedObjectContext*)context withImpurity:(NSString*)impurity  withDelta:(NSString *)delta withAssigment:(NSString*)assigment withEntity:(NSString*)entity withSolvent:(NSString*)solvent {


            NSManagedObject *pepe = [NSEntityDescription insertNewObjectForEntityForName:entity inManagedObjectContext:context];

            if (assigment.length>1) [pepe setValue:assigment forKey:@"definition"];

            [pepe setValue:impurity forKey:@"impurity"];


[[[[self pickerArray] objectAtIndex:1] objectForKey:@"tableLabels"] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

    if (obj==solvent) {
        [pepe setValue: [self numberFromText:delta :2] forKey:obj];
    }else {
        [pepe setValue: nil forKey:obj];
    }

}];

NSError *error;

if (![context save:&error]) 
{
    NSLog(@"Problem saving: %@", [error localizedDescription]);
}


}
4

0 に答える 0