2016-08-06 3 views
1

Je travaille actuellement sur une application iOS qui comprend une extension d'application watchOS. Dans mon application iOS, j'ai créé une sous-classe NSObject, qui utilise certains objets du framework AVFoundation dans certaines de ses méthodes. Sur le côté Extension de la montre, je crée un objet NSDictionary puis je l'envoie à mon homologue iOS à l'aide du cadre WatchConnectivity. J'utilise ensuite le dictionary pour initialiser ma classe personnalisée. Je voudrais être en mesure d'ajouter mon Extension de Montre comme l'une des Cibles pour le fichier .m de ma classe personnalisée afin que je puisse aller de l'avant et créer des objets de ma classe personnalisée sur la montre, puis l'envoyer. (Ma classe est conforme au protocole NSCoding donc je peux utiliser NSKeyArchiver pour représenter mon objet en utilisant NSData, l'ajouter à un dictionnaire, puis transférer ce dictionnaire sur le périphérique iOS).Objet de même classe avec différentes méthodes pour iOS et watchOS (Objective-C)

Le problème: AVFoundation n'est pas disponible dans watchOS, que ma classe utilise. Alors, est-il un moyen de « omettre » certaines méthodes d'une classe selon quel OS il est dans

Ex.: Dans iOS, UIImage a la méthode initWithCIImage: mais il n'est pas disponible dans watchOS puisque le cadre CoreImage n'est pas disponible.

(Peut-être que je devrais recréer la classe spécifiquement pour watchOS avec toutes les mêmes variables d'instance et d'utiliser les mêmes touches pour les classes dans les NSCoding méthodes, en omettant AVFoundation de la version watchOS?)

Toute aide serait grandement apprécié!

Répondre

3

Vous pouvez construire votre classe en utilisant les macros disponibles dans TargetConditionals.h, par exemple TARGET_OS_IOS ou TARGET_OS_WATCH, par exemple:

@implementation Foo 

#ifdef TARGET_OS_IOS 

- (void) someMethodThatUsesAVFoundation { 
    // ... 
} 

#endif 

@end 

Vous aurez également besoin d'envelopper #include directives pour vous assurer d'inclure uniquement les en-têtes-cadre sur la OS qui les fournit réellement.

+0

J'ai enveloppé toutes les méthodes en question comme vous l'avez suggéré, mais je reçois toujours des erreurs de construction dans les méthodes qui utilisent des objets AVFoundation. Ex: "Utilisation de l'identificateur non déclaré" XXX "". –

+0

Sans voir tout votre code, je ne peux pas être plus précis. C'est la bonne technique à utiliser pour inclure (ou pas) de code lorsque vous construisez pour un système d'exploitation particulier. Vous devrez examiner attentivement votre code et vous assurer que tout est correctement configuré. – par