2016-07-08 20 views
0

Ich versuche, einen Selektor von Klasse A nach Klasse B übergeben, um später diese Funktion aufzurufen, aber wenn ich versuche, den Selektor aus Klasse B zu verwenden, ist es nicht mehr vorhanden. Das einzige, was ich im Debugger sehe, ist, dass die Zeichenfolge in Klasse B nicht mehr existiert.Ziel C: Übergeben eines NSStringFromSelector an ein anderes Objekt

Klasse A

[classB save:@selector(otherMethodInClassA:) target:self] 

Klasse B

@property(retain) (NSString*)mySelectorString 
@property(retain) (id)someObj 
-(void)save:(SEL)selector target:(id)obj 
{ 
    mySelectorString = NSStringFromSelector(selector); 
    //I've also tried the following 
    mySelectorString = [NSStringWithFormat @"%@", NSStringFromSelector(selector)]; 
    someObj = obj; 
} 
-(void)useSelector 
{ 
    [someObj performSelector:NSSelectorFromString(mySelectorString)]; //tells me its a bad exec 
} 
+0

Verwendung für segue vorbereiten Wert zu übergeben. –

+2

Ihr Beispielselektor verwendet einen einzelnen Parameter, aber wenn Sie ihn aufrufen, wird kein solcher Parameter bereitgestellt. Überprüfen Sie die Selektorsignatur. – Avi

+0

@balkaransingh Ich benutze Kakao, nicht Kakao Touch. Nicht sicher, wie prepareforsegue würde in diesem Fall funktionieren – David

Antwort

0

Warum Sie nicht nur einen Block verwenden?

In Ihrem classB:

@property (nonatomic, strong) void(^block)(void); 

- (void)registerCallbackBlock:(void(^)(void))block { 
    _block = block; 
} 

- (void)callBlock { 
    _block(); 
} 

In Ihrem classA:

- (void)someMethod { 
    [classB registerCallbackBlock:^{ 
     [classA someOtherMethod:args...]; 
    }]; 
}