web-dev-qa-db-fra.com

La référence à 'X' est ambiguë

Après plusieurs modifications de mon projet, l'erreur de construction s'est produite:

Reference to 'kCGImageAlphaPremultipliedLast' is ambiguous

Reference is ambiguous et quand je regarde l'erreur, elle me montre qu'elle est référencée 4 fois

enter image description here

Quelqu'un peut-il me dire, s'il vous plaît, comment cela peut se produire et comment puis-je savoir ce qui le cause? Je n’importe rien explicitement à partir de CoreGraphics et mon fichier de préfixe n’importe que ‘Foundation.h ’et quelques macros faites par vous-même. J'importe cependant plusieurs en-têtes contenant du code pur, mais ils sont tous encapsulés dans quelque chose comme ceci:

#ifndef __MYCCODE_H
#define __MYCCODE_H
// imports here
// c code here
#endif

Cela se produit dans xcode 5 en utilisant LLVM 5.1

Edit: cela semble être un problème différent avec ce projet. après avoir commenté cette ligne de code, j'obtiens une autre erreur:

Malformed or corrupted AST file: 'Unable to load module "/Users/xxx/Library/Developer/Xcode/DerivedData/ModuleCache/1NHZ5MC2OSMJV/CoreImage.pcm": module file out of date'

retirer le module et l'ajouter à nouveau n'a pas aidé. la suppression des données dérivées n'a pas non plus aidé. cette erreur apparaît également lors du retour à une commande active

23
HellGate

Ok, après la création d’un nouveau projet et l’adoption de tout dans ce projet, la construction a réussi. Toutefois, j’ai eu plusieurs fois l’erreur "Fichier mal formé ou corrompu AST", mais elle peut être résolue par:

  • Nettoyer le projet
  • Supprimer tout ce qui se trouve dans '~/Library/Developer/Xcode/DerivedData/ModuleCache /' (le bouton dans la fenêtre de l'organiseur ne fonctionnait pas pour moi)
  • Nettoyer une fois de plus
  • Projet de construction

après que cela fonctionne très bien sauf que je dois faire ce correctif de temps en temps

j'ai également fait un diff pour l'ancien projet et il semble que beaucoup de frameworks et d'autres vieux trucs soient restés coincés après avoir testé des choses, donc si vous avez ceci, vérifiez dans votre fichier de paramètres de projet les vieux trucs.

je pensais que xcode et moi pouvions être amis un jour. je ne pense pas...

17
HellGate

J'ai eu ce problème quand j'ai importé un fichier d'en-tête deux fois. Une fois l’un d’eux supprimé, le problème disparaît.

13
Jibeex

C'est peut-être que vous importez comme ceci: 

#import "xxxx.h"

Je résous le problème par ceci:

#import <xxxx/xxxx.h>

13
NSKevin

Pour tous ceux qui ont encore des problèmes: Aucune des solutions proposées n'a fonctionné dans mon cas. Je compile tous mes frameworks en utilisant Carthage et ces erreurs apparaissaient dans mon projet principal lorsque j'importais l'en-tête d'un framework utilisant un framework utilisé également par mon projet principal. Ce qui a finalement résolu le problème, c’est de désactiver les «modules» sur le projet principal .  enter image description here

9
Matan Guttman

Eh bien, certaines solutions sont intéressantes, mais use_frameworks! C’est exactement ce dont j’ai besoin maintenant même si cela a posé ce problème. Mais il semble que la construction ne ressemble pas à l'utilisation de frameworks et que l'en-tête est référencé deux fois, comme ceci

#import "TSMessage.h"
#import "TSMessage+CSExtension.h"

mais le problème s'éloigne quand il compile comme ça

#import "TSMessage+CSExtension.h"
1
Renetik

Supprimer use_frameworks! depuis le fichier pod corrige mon problème ambigu.

1
furkan

utilisation 

#import "anyviewcontroller.h"

au lieu de n'importe quel module 

@import anymodule;

J'utilise LGSideMenuController, lorsque je l'intègre pour la première fois, cela fonctionne bien, mais je ne sais pas pourquoi j'ai cette erreur après un certain temps.

donc j'ai remplacé le module @import LGSideMenuController; dans le fichier d'en-tête Comme ceci #import "UIViewController+LGSideMenuController.h"

et l'erreur disparaît.

0
Mahesh Cheliya

Je viens d'avoir les mêmes avertissements qui jonchent mon rapport de construction (mais seulement sous le triangle). En fin de compte, ce qui a fonctionné pour moi a été d’assurer que CHAQUE utilisation de:

#import <Module/Module.h> 

dans l'application a été remplacé par:

@import Module;

Maintenant, tous ces avertissements ennuyeux ont disparu!

0
David H