2017-03-08 1 views
0

J'ai un ensemble de blocs nommés Objective-C dont j'ai besoin sur plusieurs viewControllers. Ces blocs nommés seront exécutés via dispatch_async().Comment puis-je déclarer un ensemble de blocs Objective-c dans un fichier séparé et inclure ce fichier dans mon code?

Au lieu de les déclarer plusieurs fois, je voudrais les déclarer une fois (comme dans une combinaison sous-classée .h/.m NSObject), puis #import comme une sous-classe standard.

Comment est-ce que je peux faire ceci? Ça me rend dingue. J'ai essayé plusieurs façons, mais la solution ne cesse de m'évader. S'il vous plaît aider!

Merci Shaan

Répondre

0

Dans votre fichier .h, déclarez vos variables de bloc comme ceci:

#import <Cocoa/Cocoa.h> 

extern int (^intReturningBlock)(int foo, int bar); 
extern NSString* (^stringReturningBlock)(int foo, int bar); 

Et dans votre fichier .m, créez les variables de bloc:

#import "MyBlocks.h" 

int (^intReturningBlock)(int foo, int bar) = ^int(int foo, int bar) { 
    return foo + bar; 
}; 

NSString* (^stringReturningBlock)(int foo, int bar) = ^NSString*(int foo, int bar) { 
    NSNumber* tmp = @(foo + bar); 
    return [tmp description];  
}; 

Mon instinct me dit est que la partie qui vous manque est la extern sur les déclarations. Ce site est une référence utile: http://goshdarnblocksyntax.com

+0

Oui, cela a fait l'affaire! Ça fonctionne maintenant. Il me manquait en effet l'extern. Merci beaucoup, impcc! –