60 votes

Xcode 8 Objective-C catégorie d'avertissement

Je suis en utilisant Xcode 8 et Swift 3.0. Ce qui ne signifie ce message d'erreur?

ld: avertissement: Certains des fichiers d'objets incompatibles Objective-C définitions des catégories. Certaines catégorie de métadonnées peuvent être perdues. Tous les fichiers contenant Objective-C, ces catégories devraient être construits avec le même compilateur.

40voto

user2027279 Points 373

J'ai aussi eu ce problème en UIColor extension, mon application est entièrement réalisé avec swift, sauf pour certains cadres qui utilisent Objective-c donc je n'ai aucun problème lors de la déclaration de l' var comme @nonobjc:

extension UIColor {
   @nonobjc static var lol: UIColor {
      return UIColor.red
   }
}

À partir de l'apple docs:

Le nonobjc attribut indique au compilateur de faire la déclaration indisponible dans le code Objective-C...

Étant donné que ce code n'est pas disponible pour Objective-C l'avertissement disparaît.

22voto

Hejazi Points 5981

Dans mon cas, la raison était d'avoir calculé le type de propriété dans une extension:

extension NSParagraphStyle {
    class var defaultStyle: NSParagraphStyle {
        return ...
    }
}

Pas sûr de ce que la raison exacte derrière cela est, mais pour se débarrasser de l'avertissement que j'ai eu à convertir le résultat d'un calcul du type de biens (class var) à une méthode de type (class func):

extension NSParagraphStyle {
    class func defaultStyle() -> NSParagraphStyle {
        return ...
    }
}

10voto

Filip Points 2856

Cet avertissement est apparu dans mon projet après l'ajout d'un cadre qui utilisé Objective-C dans mon application utilisée d'une autre manière Swift 3 entièrement.

En déclarant toutes les fonctions statiques et variables statiques dans toutes les extensions que @nonobjc cet avertissement s'en alla.

Par exemple

extension Notification.Name {
    @nonobjc static let MyNotificationName = Notification.Name("NNSongFavoriteStatusDidChangeNotification")
}

ou

extension UIColor {
    @nonobjc static let superGiantRed = UIColor(red: 180.0/255.0, green: 40.0/255.0, blue: 27.0/255.0, alpha: 1.0)
}

8voto

Renato Ioshida Points 191

Google Analytics pod

Dans les Paramètres de construction -> d'Autres Drapeaux de l'éditeur de liens si vous avez l' -ObjC sur -l"GoogleAnalytics" drapeau de cet avertissement apparaît. Je ne sais pas pourquoi ou comment le résoudre, mais peut-être votre problème.

4voto

Bogdan Points 51

Dans mon cas, c'était une variable de classe.

public extension NSObject {
    public class var nameOfClass: String{
        return NSStringFromClass(self).components(separatedBy: ".").last!
    }

L'ajout de @nonobjc aidé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X