Maison >développement back-end >tutoriel php >Questions de développement iOS (9)
101. Erreur de compilation : ld : bibliothèque introuvable pour -lPods
Cette erreur se produit souvent lorsque cocoaPods est utilisé dans le projet (généralement lors de la sortie).
En effet, les cocoaPods créeront un nouvel espace de travail après l'installation du pod. Vous devez fermer le projet et le rouvrir. Le problème est résolu.
102. Pourquoi l'heure iOS est-elle toujours 8 heures plus lente que l'heure réelle
Par exemple, une heure de Pékin "2014-4-4 22:00" (chaîne) doit être convertie en NSDate. La conversion des chaînes en NSDate est généralement effectuée via NSDateFormatter. Sur iOS, NSDate est stocké à l'heure GMT, donc NSDateFormatter traitera automatiquement l'heure locale du fuseau horaire actuel de la chaîne, c'est-à-dire convertira l'heure de Pékin convertie (chaîne "2014-4-4 22:00") en GMT heure (" 2014-4-4 14:00"). Si vous transmettez directement ce NSDate (longlong, le nombre de secondes ou millisecondes depuis 1970) au serveur, le serveur utilisera cette heure comme heure de Pékin (en fait c'est l'heure GMT), ce qui entraîne un décalage horaire de 8 heures.
La bonne approche consiste à ajouter le décalage horaire en fonction de cette NSDate. Le calcul du décalage horaire nécessite de connaître le fuseau horaire actuel. [NSTimeZonesystemTimeZone] peut obtenir le fuseau horaire actuel (East 8 Zone), puis utiliser la méthode secondsFromGMTForDate: pour obtenir le décalage horaire (en secondes) de ce fuseau horaire (East 8 Zone). Le code est le suivant :
NSDateFormatter* df=[NSDateFormatter new]; // [dfsetLocale:[NSLocale currentLocale]]; df.dateFormat=@"yyyy-MM-dd HH:mm"; NSDate* date=[dfdateFromString:@"2014-4-4 22:00"]; NSTimeZone *zone =[NSTimeZone systemTimeZone]; NSInteger interval = [zonesecondsFromGMTForDate: date]; NSDate *localeDate =[date dateByAddingTimeInterval:interval]; NSLog(@"%@",localeDate);
103. Désactivez l'animation contextuelle du clavier dans UITableViewController
TableViewController a un code intégré pour l'animation contextuelle du clavier lors du contrôle d'entrée dans le. La cellule fait apparaître le clavier logiciel, la tableView défilera automatiquement vers le haut. Mais cette fonctionnalité pose parfois de gros problèmes, car parfois le contrôle de saisie défilera vers un endroit invisible. Comme nous ne pouvons pas modifier le code du framework, dans ce cas, nous devons renoncer à utiliser TableViewController (sous-classement) et utiliser à la place le UIViewController général UITableView. Mais parfois, nous devons utiliser TableViewContrller - par exemple, si nous voulons utiliser ses cellules statiques, nous pouvons le résoudre via les méthodes suivantes. Remplacez la méthode viewWillAppear dans la sous-classe UITableViewController pour désactiver le comportement viewWillAppear de la classe parent. Autrement dit, n'appelez pas [superviewWillAppear:animated] :
-(void)viewWillAppear:(BOOL)animated{ // Override super method with don'tcall [super viewWillApper] }
104. Quand devez-vous utiliser NSCache
NSCache libérera automatiquement l'un des objets du cache en fonction de la pression de la mémoire (par exemple ? exemple, la vue est détruite ou il y a trop d'objets en cache). Par conséquent, les objets mis en cache par NSCache doivent être reconstructibles, comme ces objets - des données qui peuvent être téléchargées depuis le réseau en cas de besoin. Sinon, vous ne devriez pas utiliser NSCache - l'objet sera détruit à un moment donné.
Par conséquent, lors de l'utilisation de NSCache, vous devez faire attention. Si l'objet récupéré n'existe pas dans le cache, nous devons en reconstruire un :
-(CachedObject)getCachedObject:(id)key{ id* obj=[NSCacheObjectobjectForKey:key]; if (cb==nil) { obj=[[CachedObjectalloc]init]; // Recreate cached object …… } return obj; }
105. Problème d'archive Pods sur Xcode5<.> Description du problème : L'erreur suivante se produit lorsque
Archive (cela peut être normal lors du débogage) :
ld : bibliothèque introuvable pour -lPods
Le problème est que Xcode5.x va désormais détecter l'architecture de projets dépendants et ses paramètres Il doit être cohérent avec le projet principal, sinon le projet dépendant sera rejeté (c'est-à-dire qu'il ne sera pas compilé).
Solution :
Sous toutes les cibles du projet Pods, définir leur architecture pour qu'elle soit cohérente avec le projet principal.
106. Comment vérifier l'architecture prise en charge par une bibliothèque statique
Utilisez la commande "lipo -info static library file", par exemple :
lipo -info Unrar4iOS
Ensuite, le terminal affichera ce qui suit :
Les architectures dans le fichier fat : Unrar4iOS sont : armv7 armv6 i386
107 L'introduction de certaines bibliothèques statiques dans le projet provoquera l'erreur "Symboles non définis pour l'architecture armv7s/arm64" dans l'archive
As. mentionné à la question 105. En plus d'utiliser la solution de la question 105, il existe une autre solution de contournement.
Vérifiez d'abord l'architecture de la bibliothèque statique (voir question 106). Modifiez ensuite Scheme pour prendre en charge l'architecture de la bibliothèque statique. Modifiez ensuite Build Active ArchitectureOnly dans Buid Settings (compilez uniquement pour l’architecture sélectionnée) et modifiez la valeur sur Yes. Puis compilez-le.
108. Sous Autolayout, la hauteur de UITableView est incorrecte
Sous Autolayout, s'il y a une barre de navigation, UITableView sur la vue est limitée par des contraintes et la hauteur d'exécution est réinitialisée par des contraintes à la hauteur sans navigation. bar. A ce stade, la méthode viewDidLayoutSubviews doit être implémentée pour éliminer l'influence des contraintes :
- (void)viewDidLayoutSubviews { _table.frame=CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); }109 Comment modifier le titre du bouton de retour par défaut ?
Supposons que la navigation soit : Vue A --> Vue B
Si vous souhaitez modifier le titre du bouton de retour de la vue B pour revenir à la vue A, utilisez simplement le code suivant dans la vue A :
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil]; B视图不用做任何操作。110. Il y a un objet vide, mais il n'est ni nul ni nul ?
C'est NSNull. Vous pouvez imprimer cet objet (à l'aide de la commande po ou de NSLog), et le résultat imprimé sera "3974e2f309543466c662a718e86a1c17" au lieu de "(null)" (objet nul).
Étant donné que les objets de collection O-C ne permettent pas d'insérer des valeurs nulles (nil) et que NSNull n'est pas nul, l'objet NSNull est utilisé pour indiquer que la collection est vide (indiquant la fin de la liste). De plus, contrairement à nil, l'envoi d'un message à un NSNull provoquera une exception.
NSNull a la seule méthode : [NSNull null] Vous pouvez l'utiliser pour tester si un objet est NSNull :
BOOL isNSNull(id any){ return [any isEqual:[NSNullnull]]; }
以上就是iOS 开发百问(9)的内容,更多相关内容请关注PHP中文网(www.php.cn)!