2010-10-08 3 views
1

J'utilise la bibliothèque Three20 dans mon application, je vois cette erreur pendant la liaison de l'application:« _UIApplicationDidEnterBackgroundNotification », référencé à partir de: Erreur lors reliant

« _UIApplicationDidEnterBackgroundNotification », référencé à partir de: _UIApplicationDidEnterBackgroundNotification $ non_lazy_ptr dans libThree20UINavigator.a (TTBaseNavigator.o) (peut-être que vous vouliez dire: _UIApplicationDidEnterBackgroundNotification $ non_lazy_ptr) ld: symbole (s) non trouvé

J'ai vu que ce problème se produit lorsque je tente de construire pour BASE SDK IOS 3.2 Simulator mais pas sur IOS 4.1 Simulator. J'ai essayé les paramètres suivants en vain:

Architecture for my project and ALL Three20 projects set to Optimized 
Project Settings/Active Target - BaseSDK for my project and ALL Three20 projects set to IOS 3.2 Simulator 

Architecture for my project and ALL Three20 projects set to Standard 
Project Settings/Active Target - BaseSDK for my project and ALL Three20 projects set to IOS 3.2 Simulator 

Architecture for my project and ALL Three20 projects set to Standard 
Active Target - BaseSDK for my project and ALL Three20 projects set to IOS 3.2 Simulator 
Project Settings - BaseSDK for my project set to IOS 4.1 Simulator 

Voici les paramètres qui fonctionnent:

Architecture for my project and ALL Three20 projects set to Standard (or Optimized) 
Active Target/Project Settings BaseSDK for ALL Three20 projects set to IOS 3.2 Simulator 
Active Target/Project Settings BaseSDK for my project set to IOS 4.1 Simulator 

Je suis fatigué d'essayer ces permutations. Vraiment envie de comprendre ce qui se passe - mais n'ont pas été en mesure de trouver des journaux significatifs. Merci pour vos commentaires/réponses.

Répondre

1

ce symbole est déclaré dans le SDK 4.0. vous ne pouvez pas utiliser cette fonction sur iOS 3.x. vous avez 2 choix:

1) cible iOS 4.0 ou plus

2) utilisent une version antérieure de Three20, qui a été conçu pour fonctionner avec le sdk vous ciblez

+0

C'est exact. J'ai utilisé l'option 3, qui commente des lignes de code dans TTBaseNavigator qui causaient ce problème de temps de compilation. Je comprends que c'est un hack, mais j'ai décidé consciemment de le faire car je n'utilisais que des fonctionnalités très limitées de Three20. – amehta

+0

oui - c'est aussi une option (mais j'essaie d'éviter de maintenir une branche distincte si possible). cela aide dans ce cas à ajouter une assertion sur le site d'appel, pour vérifier que vous ne l'exécutez jamais dans ce bloc. – justin

0

La meilleure façon de contourner ce Le problème est le lien faible contre UIKit. Vous pouvez le faire dans vos paramètres projet/cible dans l'onglet général. Dans la section Bibliothèques liées, recherchez UIKit et définissez le type de Requis à Faible.

2

Fuite faible UIKit ralentit inutilement votre application considérablement - ne le faites pas.

Définissez votre Base SDK au plus haut possible, puis définissez votre Deployment Target comme le système d'exploitation le plus bas que vous voulez prendre en charge. Le compilateur liera automatiquement seulement aux API non disponibles dans le SDK inférieur. N'oubliez pas que vous devez vérifier les nouvelles classes avant de les utiliser si vous souhaitez utiliser un ancien système d'exploitation.

Questions connexes