'Mobile' Catégorie


XCode 3.1.3: Restaurer le SDK 2.2.1

Seulement pour les développeurs enregistrés ont déjà publié une nouvelle version du SDK pour l'iPhone d'Apple, il est donc temps pour installer le SDK 3.0, mettant ainsi à jour l'ensemble de l'environnement de développement XCode pour version 3.1.3. Si vous avez déjà mis à niveau, vous aurez remarqué que la création d'un nouveau projet semblent être absents de l'ancien SDK 2.2.1 (y compris les autres).

xcode313

En fait tout est là sur notre machine, vous pouvez simplement effectuer une procédure simple pour restaurer magie tous nos SDK précédente, alors essayez notre application pour l'iPhone d'Apple est le 3.0 SDK qui avec les versions précédentes 2.2.1 et inférieures. Sélectionnez le projet, ouvrez le menu contextuel et choisissez Obtenir des informations:

xcode131menu

Dans la fenêtre qui s'ouvre, d'abord dans l'onglet Général, sélectionnez le SDK de base inférieur à toutes les configurations et restauré 2.2.1 (ou autre) SDK.

xcode313info

Sans cela, comme par magie, le menu s'affiche à nouveau toutes les XCode SDK dont 3,0

xcode313ok

Suite ...

iPhone: toutes les polices du système

L'iPhone d'Apple offre un nombre limité de polices pour les développeurs. La liste des polices disponibles est facilement réalisé par le code, comme nous le verrons. Si vous souhaitez utiliser vos propres polices, comme en l'incluant dans les ressources, il est un peu plus articulé et conivolge également la délivrance des licences (droits) des polices "embed" ... nous allons parler plus tard. Se tournant plutôt vers les sources officielles présentes dans l'iPhone, ils sont (cliquez sur l'image pour agrandir):

iphonefonts

L'Apple iPhone SDK fournit un accès aux polices système spécial. Ils sont identifiés par des constantes particulières et sont les suivants:

1
2
3
[ UIFont boldSystemFontOfSize : 12.0 ] ; UIFont myBoldFont * = [UIFont boldSystemFontOfSize: 12.0];
[ UIFont SystemFontOfSize : 12.0 ] ; UIFont mySystemFont * = [UIFont SystemFontOfSize: 12.0];
[ UIFont italicSystemFontOfSize : 12.0 ] ; UIFont myItalicFont * = [UIFont italicSystemFontOfSize: 12.0];

Si vous obtenez en fait un pointeur sur une Odei polices affiché dans l'image ci-dessus il suffit d'utiliser:

1
[ UIFont fontWithName : @ "Helvetica-Bold" size : 22.0 ] ; UIFont myCustomFont * = [fontWithName UIFont: @ "Helvetica-Bold" taille: 22.0];

Comme vous pouvez voir la direction de la police est spécial, en plus de la famille (Helvetica, Courier, etc ...) doit préciser le type (gras, italique, etc ...). En pratique, donc, une police doit être équipé avec ces caractéristiques. L'Helvetica, par exemple, est représentée par:

1
2
3
4
Helvetica
Helvetica-Bold
Helvetica-Oblique
Helvetica-BoldOblique

Si vous souhaitez afficher vos polices directement sur l'iPhone, voici quelques lignes de code utiles:

1
2
3
4
5
6
7
8
9
10
11
12
listOfFonts = [ [ NSArray alloc ] initWithArray : [ UIFont familyNames ] ] ; NSArray * listOfFonts = [[ NSArray alloc] initWithArray: [UIFont familyNames]];
subFontTypes; NSArray * subFontTypes;

int i = 0 ; i< [ listOfFonts count ] ; i ++ ) { for (int i = 0; i <[listOfFonts count]; i + +) {
"Font Family: %@" , [ listOfFonts objectAtIndex : i ] ) ; NSLog (@ "famille de polices:% @", [objectAtIndex listOfFonts: i]);
NSArray alloc ] initWithArray : [ UIFont fontNamesForFamilyName : [ listOfFonts objectAtIndex : i ] ] ] ; subFontTypes = [[ NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName: [objectAtIndex listOfFonts: i]]];
int j = 0 ; j< [ subFontTypes count ] ; j ++ ) { for (int j = 0 j <[subFontTypes count] j + +) {
"+----->Type: %@" , [ subFontTypes objectAtIndex : j ] ) ; NSLog (@ type "+----->:% @ ", [objectAtIndex subFontTypes: j]);
}
; [Communiqué de SubFontTypes];
}
; [ListOfFonts release];

Avec le SDK 2.2.1 sur mon simulateur, j'ai obtenu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Famille de polices: Courier
Tapez +----->: Courier
Tapez +----->: Courrier-BoldOblique
Tapez +----->: Courier-Oblique
Tapez +----->: Courier-Bold
Famille de polices: AppleGothic
Tapez +----->: AppleGothic
Famille de polices: Arial
Tapez +----->: ArialMT
+-----> Type: Arial-BoldMT
+-----> Type: Arial-BoldItalicMT
+-----> Type: Arial-ItalicMT
Famille de polices: sthe TC
Tapez +----->: Light-STHeitiTC
+-----> Type: moyen STHeitiTC
Famille de polices: Hiragino Kaku Gothic Pron
Tapez +----->: HiraKakuProN-W6
Tapez +----->: HiraKakuProN-W3
Famille de polices: Courier New
Tapez +----->: CourierNewPS-BoldMT
Tapez +----->: CourierNewPS-ItalicMT
Tapez +----->: CourierNewPS-BoldItalicMT
Tapez +----->: CourierNewPSMT
Famille de polices: Zapfino
+-----> Type: Zapfino
Famille de polices: Arial Unicode MS
Tapez +----->: ArialUnicodeMS
Famille de polices: sthe SC
Tapez +----->: Moyen-STHeitiSC
Tapez +----->: Light-STHeitiSC
Famille de polices: American Typewriter
Tapez +----->: AmericanTypewriter
Tapez +----->: AmericanTypewriter-Gras
Famille de police: Helvetica
+-----> Type: Helvetica-Oblique
+-----> Type: Helvetica-BoldOblique
+-----> Type: Helvetica
Tapez +----->: Helvetica-Bold
Famille de polices: feutre
Tapez +----->: Thin-MarkerFelt
Famille de police: Helvetica Neue
Tapez +----->: HelveticaNeue
+-----> Type: HelveticaNeue-Gras
Famille de polices: DB LCD Temp
Tapez +----->: DBLCDTempBlack
Famille de polices: Verdana
+-----> Type: Verdana-Gras
Tapez +----->: Verdana-BoldItalic
+-----> Type: Verdana
Tapez +----->: Verdana-italique
Famille de police: Times New Roman
Tapez +----->: TimesNewRomanPSMT
Tapez +----->: TimesNewRomanPS-BoldMT
Tapez +----->: TimesNewRomanPS-BoldItalicMT
Tapez +----->: TimesNewRomanPS-ItalicMT
Famille de polices: la Géorgie
+-----> Type: Georgia-Gras
+-----> Type: Géorgie
+-----> Type: Georgia-BoldItalic
+-----> Type: Georgia-italique
Famille de polices: sthe J
+-----> Type: moyen STHeitiJ
+-----> Type: Light-STHeitiJ
Famille de polices: Arial Rounded MT Bold
Tapez +----->: ArialRoundedMTBold
Famille de polices: Trebuchet MS
Tapez +----->: TrebuchetMS-italique
Tapez +----->: TrebuchetMS
+-----> Type: Trébuchet-BoldItalic
Tapez +----->: TrebuchetMS-Gras
Famille de polices: sthe K
Tapez +----->: Moyen-STHeitiK
Tapez +----->: Light-STHeitiK

Suite ...

Comment supprimer NSLog () de la source XCode

<a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog">NSLog()</a> une fonction utile durant les premiers stades d'un projet pour tester et déboguer une application pour iPhone d'Apple ou, plus généralement, dans l'environnement XCode. Etre juste une fonction, tout comme les autres, sa présence se fera sentir, même lors de la publication (release) de notre exécutable. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Il devient alors nécessaire d'enlever, d'une certaine façon, toutes les lignes de NSLog() de notre code, car il n'est plus nécessaire, et parce que les appels à NSLog() pourrait affecter les performances de notre application, surtout si nous mettons NSLog() à la «boucle interne.

Immédiatement écarter la solution au "look" et "annuler" parce qu'un jour il pourrait être utilisé à nouveau. Nous excluons la solution du «look» et «commentaires», inconfortable pour la même raison que précédemment. Heureusement, une. Propre, simple, et en utilisant le compilateur correct conditionnelles Ce que nous ferons, dans la pratique, et dire au compilateur d'exclure - s'il ya une condition spécifique - lors de la compilation de nos lignes source qui contiennent NSLog() .

Les directives de compilation et des déclarations de compilation conditionnelle, sont un outil très puissant et très répandue. Ceux venant de l'élaboration de la norme ANSI-C connaît très bien et sera certainement utilizzte dans de nombreuses situations. La particularité de ces «instructions» réside dans le fait, mentionné plus haut, pour être vu par le compilateur et non exécutable. Cette caractéristique les rend utiles dans de nombreux cas et peut résoudre les problèmes par ailleurs très agaçant.

Voyons un exemple de code qui, comme prévu, vous pouvez "supprimer" de la compilation du partage de code, dans notre cas NSLog() :

1
2
3
4
5
6
# Définir une ACTIVE_NSLOG
/ / Si la constante est définie ACTIVE_NSLOG remplissez
/ / Le bloc de code entre # ifdef et # endif
# Ifdef ACTIVE_NSLOG
" ... bla bla" ) ; NSLog (@ "... bla bla");
# Endif

). Les instructions conditionnelles font partie de la compilation de la même famille que #define , également, en fait, sont précédés d'un "livre" ( # ). solo se ACTIVE_NSLOG è definito. Dans l'exemple montré que nous avons défini une constante ACTIVE_NSLOG ; lignes de code indique au compilateur de ligne "include" NSLog() que si ACTIVE_NSLOG est défini. Si nous avons pris soin, lors de la rédaction de notre code, de placer des appels à NSLog() dans le bloc #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , il suffit de supprimer la définition de la constante ACTIVE_NSLOG à disparaître, la prochaine compilation, tous nos NSLog() .

Une meilleure et finale

Voyons maintenant comment configurer l'environnement XCode pour améliorer encore plus ce que nous avons fait ici! Tout d'abord nous choisissons un nom de constante que nous utilisons dans nos projets d'exclure de la compilation NSLog() . o quello che preferite. Vous pouvez choisir le nom que vous voulez, à partir DEBUG au MIO_DEBUG ou ce que vous préférez. Ouvrez votre projet, neuf ou ancien. Entrez toutes les NSLog() dans le bloc (ou bloc):

1
2
3
# Ifdef MIO_DEBUG
" ... bla bla" ) ; NSLog (@ "... bla bla");
# Endif

Sélectionnez le fichier principal de votre projet, cliquez sur le bouton droit et choisissez l'option Get Info.

getinfo

Ceci ouvre la fenêtre avec des informations sur le projet:

userdefine

Sélectionnez l'onglet Générer, vérifiez que vous êtes dans la configuration Debug (ce qui est le joyau), allez à la section utilisateur et d'ajouter, via le bouton en bas à gauche, un nouveau champ appelé OTHER_CFLAGS . A cette valeur assegnamoli -DMIO_DEBUG=1 . La syntaxe est -D{mia define}=1 .

Cette procédure a deux avantages:

  1. Nous ne devons pas mettre dans le code #define MIO_DEBUG 1 , mais nous le faisons à travers les informations du projet. Alors, quand nous allons à remplir la version (l'un sans l' NSLog() ) n'ont pas à se rappeler pour supprimer la ligne #define MIO_DEBUG 1
  2. La constante est définie par rapport à la configuration, dans notre cas de débogage. Ainsi, le passage à la version de configuration (communiqué) seront absents et les rangées constante avec NSLog() ne sera pas compilé

Conclusions

La procédure ci-dessus peut être utile dans un cas moltidutine autre, avec NSLog() , n'ont rien à faire. Les instructions conditionnelles peuvent aider le compilateur dans un large éventail de contextes. Ils sont souvent utilisés par les programmeurs pour déterminer le type de système d'exploitation, la version, la cible, la présence de processeurs mathématiques, tout en conservant le même "même" source.

Pour comprendre, par exemple, nous pouvons utilizzre notre constante MIO_DEBUG également intervenir dans d'autres domaines du code:

1
2
3
4
5
6
7
8
9
10
/ / Debug s'ils gagnent le match
/ / Avec un score de 100 au lieu de 10 000:)
# Ifdef MIO_DEBUG
score == 100 ) if (score de == 100)
# Else
score == 10000 ) if (score de == 10000)
# Endif
{
; [HaiVinto auto];
}

Pour finir, voici quelques exemples et des variantes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ / En général, il ya
# Si l'expression
/ / Si la déclaration semblable à la traditionnelle, donc avec une pleine expression

/ / Vérifier si une constante est définie
# Ifdef constante

/ / Vérifier si ce n'est pas une constante définie
# Ifndef constante

/ / Else
# Else

/ / Fermer le bloc
# Endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Par exemple ...
# Define DEBUG 1
5 # define MIA_ALTRA_COSTANTE

...
# Si DEBUG
/ / Remplissez ce
# Else
/ / Sinon remplissez cet autre
# Endif

# Si MIA_ALTRA_COSTANTE> 4
"..." ) ; NSLog (@ "...");
# Endif
1
2
3
4
# Ifndef INCLUDE_MIO_FILE
# Définir INCLUDE_MIO_FILE
# Include "mio_file.h"
# Endif

Suite ...

Objective-C: conversion de type

Avec certains langages de haut niveau tels que JavaScript ou PHP, où les données ne sont pas typées ou autrement ne peuvent pas être, nous sommes "gâtés" en comparer ou convertir des chaînes et les entiers et vice versa, tous cachés ou manipulés par l'interprète (ou le compilateur ). Par exemple, dans les fonctions JavaScript sont «contraints» (comme parseInt() par exemple) nécessaires dans des cas particuliers. Cependant, dans d'autres circonstances nous traitons sans se soucier une conversion particulière entier (explicites), tels que:

1
2
3
5 ; mioNumero var = 5;
/ / ...
"Il valore di mioNumero è " + mioNumero ) ; alert ("La valeur de mioNumero est" + mioNumero);

En Objective-C, cependant, le type de données est important et la conversion de type doit être explicite. Outre le casting (transtypage meilleure), nous pouvons utiliser les fonctionnalités spécifiques à la conversion de type. Par exemple, voici comment convertir un entier en une chaîne:

1
2
3
4
5 ; mioNumero int = 5;
miaStringa = [ NSString stringWithFormat : @ "%d" , mioNumero ] ; NSString * myString = [ NSString stringWithFormat: @ "% d", mioNumero];
/ /
"miaStringa=%@ mioNumero=%i" , miaStringa, mioNumero ) ; NSLog (@ "maChaine = @% mioNumero =% i", maChaine, mioNumero);

En revanche, voici comment convertir une chaîne en un entier:

1
2
3
4
miaStringa = @ "128" ; NSString * myString = @ "128";
[ miaStringa integerValue ] ; mioNumero int = [maChaine integerValue];
/ /
"miaStringa=%@ mioNumero=%i" , miaStringa, mioNumero ) ; NSLog (@ "maChaine = @% mioNumero =% i", maChaine, mioNumero);

Suite ...

extrait de code iPhone: UIAlertView

La classe UIAletrView vous permet d'afficher une fenêtre modale (animation) pour informer et / ou vous demander quelque chose. Le UIAlterView (alertes vue) sont très confortables et faciles à utiliser. La gestion de la réponse de l'utilisateur est résolu par l'interception de l'indice du bouton pressé. Pour visualiser d'un simple UIAlterView il suffit d'écrire:

1
2
3
4
/ / Alert avec un bouton simple, sans rappel
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" cancelButtonTitle : @ "Annulla" otherButtonTitles : nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Titre" message: @ "Message" cancelButtonTitle: @ "Annuler" otherButtonTitles: nil];
; [MyAlert spectacle];
; [MyAlert presse];

Et 'possible d'ajouter des boutons supplémentaires otherButtonTitles :

1
2
3
4
/ / Alerte à deux simples boutons, pas de rappel
[ [ UIAlertView UIAlertView MyAlert * = [[UIAlertView
; [MyAlert spectacle];
; [MyAlert presse];

: Pour déterminer quel bouton a été pressé, ajoutez simplement le delegate:self initialisation d'objets UIAlterView :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Alert simple avec deux boutons et rappels
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Titre" message: @ "Message" délégué: cancelButtonTitle auto: @ "Annuler" otherButtonTitles: @ "OK", nil];
; [MyAlert spectacle];
; [MyAlert presse];

/ / La fonction de rappel ressemble à ceci

void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
buttonIndex ) { switch (buttonIndex) {
: cas 1:
/ / Code
break;
}
}

Le rappel alertView besoin d'avoir ce nom, pour plus d'informations, voir UIAlertViewDelegate

punteranno sempre a quella. Avec seulement la callbck alertView:clickedButtonAtIndex plus UIAletrView pointera toujours à cela. Utilisation de la balise du champ UIAletrView , nous pouvons déterminer ce que le «meneur»:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Alert simple avec deux boutons et rappels
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Titre" message: @ "Message" délégué: cancelButtonTitle auto: @ "Annuler" otherButtonTitles: @ "OK", nil];
; myAlertA.tag = 1;
; [MyAlert spectacle];
; [MyAlert presse];

/ /
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView myAlertB * = [[UIAlertView alloc] initWithTitle: @ "Titre" message: @ "Message" délégué: cancelButtonTitle auto: @ "Annuler" otherButtonTitles: @ "OK", nil];
; myAlertA.tag = 2;
; [MyAlertB spectacle];
; [MyAlertB release];

/ / Gestion de multiples UIAlertView

void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
"Alert Tag: %i" , alertView.tag ) ; NSLog (@ "Balises d'alerte:% i", alertView.tag);
"buttonIndex: %i" , buttonIndex ) ; NSLog (@ "buttonIndex:% i", buttonIndex);
}

Suite ...

iPhone en Objective-C la syntaxe d'équivalence

La syntaxe avec des crochets en Objective-C est l'une des raisons les plus de frustration pour ceux qui viennent d'autres langues (pour les objets). Toutefois, vous y habituer, vous réalisez combien le code lisible devient trop avec ce mélange de classique et plus distinctement la syntaxe Smalltalk. Par exemple, nous voyons comment la même procédure peut être écrite dans les deux syntaxe. Prenez l'initialisation d'un UIAlertView :

1
2
3
4
5
6
7
8
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Titre"
"Messaggio" message: @ "Message"
délégué: auto
"Annulla" cancelButtonTitle: @ "Annuler"
"Ok" , nil ] ; otherButtonTitles: @ "OK", nil];
; myAlert.tag = 1;
; [MyAlert spectacle];
; [MyAlert presse];

Le réglage de la potavamo tag encore ainsi:

1
2
3
4
5
6
7
8
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Titre"
"Messaggio" message: @ "Message"
délégué: auto
"Annulla" cancelButtonTitle: @ "Annuler"
"Ok" , nil ] ; otherButtonTitles: @ "OK", nil];
1 ] ; [MISE MyAlert: 1];
; [MyAlert spectacle];
; [MyAlert presse];

Même chose à la lecture lors de l'événement:

1
2
3
4
5
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
alertView.tag == 1 ) { // ... if (alertView.tag == 1) {/ / ...
/ / Ou
alertView tag ] == 1 ) { // ... if ([alertView tag] == 1) {/ / ...
}

Remarque: Pas toutes les propriétés ou les méthodes ont cette syntaxe double. Dans le cas de « UIAlertView nous avons cette double fonctionnalité. Pour les autres objets, ou dans d'autres cas, cependant, un seul des deux pourrait fonctionner ... mais ne me demandez pas pourquoi (selon la façon dont les développeurs ont défini l'interface).

Suite ...

Trace Actionscript, Objective-C NSLog ()

, usata per il debug delle applicazioni. Reprenant le message à partir d'ActionScript à Objective-C (où l'on compare le code et la syntaxe ActionScript et Objective-C), nous avons la fonction pratique dans ActionScript trace ( ) , utilisée pour le débogage des applications. Cette fonction produit une console sur l'environnement de développement Adobe Flash. Il est principalement utilisé pour le débogage et le test de "film" / application. Dans Xcode / Objective-C, nous avons: NSLog ( ) . di Actionscript: La syntaxe de cette fonction est très similaire à la trace ( ) dans ActionScript:

1
"Sono una linea di debug" ) ; NSLog (@ "Je suis le débogage d'une ligne");

Dans ActionScript, nous avons:

1
"Sono una linea di debug" ) ; trace ("Je suis le débogage d'une ligne");

Outre l'utilisation de l'arobase (@), comme vous pouvez le voir, sont identiques. Les différences (et similitudes) démarre lorsque vous souhaitez afficher les valeurs des variables, par exemple en Actionscript, nous avons:

1
2
3
"Coordinata x:" + x + " coordinata y:" + y ) ; trace ("coordonnée x:" + x + "coordonnée y:" + y);
/ / Ou
"Coordinate: " , x , y ) ; trace ("Coordonnées", x, y);

En Objective-C, nous avons:

1
"Coordinata x:%i coordinata y:%i" , x, y ) ; NSLog (@ "abscisse: le% y% de coordonner i", x, y);

che opera sull'Apple System Log. Note: NSLog() appelle en fait la fonction plus générique NSLogv ( ) qui fonctionne sur le journal du système mise. Les fonctions sont en fait identiques, en changeant seulement les paramètres d'entrée.

o sprintf ( ) . Les développeurs trouveront très familier avec le formatage de chaîne C, comme avec printf ( ) ou sprintf ( ) . Pour plus de détails, voir spécificateurs de format de chaîne .

Suite ...

Très court astuce: NSTimer arrêter

L'utilisation de minuteries ( NSTimer ) pour développer des applications pour l'iPhone d'Apple est très fréquent, pas seulement à faire des jeux. Un des problèmes avec laquelle on peut se heurtent est la asynchronisme de la minuterie, ce qui peut entraîner, lors de l'arrestation d'un ou plusieurs temporisateurs, le crash de notre application. , si invoca la invalidate che, appunto, arresta il timer. Lorsque vous souhaitez arrêter une ou plusieurs minuteurs, où repeats est réglé sur YES , il invoque l' invalidate qui, précisément, le chronomètre s'arrête.

Suite ...

Apple iPhone SDK 3.0: Correction d'un bug sur le UIButton buttonWithType

Comme indiqué dans le message d'Apple iPhone SDK 3.0: incompatibilité premier de la Pomme 3.0 SDK montrent des comportements différents en matière de libération 2.2.1. Services de soutien pour les développeurs m'a donné la réponse, et ensuite la solution au problème. . La réponse a été que le support technique [UIButton buttonWithType:] déjà appelé - à l'intérieur - l' initWithFrame . Il s'ensuit que, selon le support technique, de l'écriture:

Suite ...

À partir d'ActionScript à Objective-C

J'ai pensé qu'il pourrait être utile à ceux qui ont récemment approché le développement d'applications pour l'iPhone d'Apple, comparez Adobe ActionScript - le langage utilisé dans Adobe Flash et Adobe Flex, plus fréquente chez les néo-programmeurs - et Objective-C de langue utilisé par Apple pour développer ses applications. Objective-C est en effet un langage orienté objet, dans le sens pur, non pas qu'il n'est pas actionscript, mais Objective-C est certainement un plus, car il est une extension du C ANSI et sa syntaxe est un mélange entre le C / C + + et Smalltalk, est une vraie OO (Object-Oriented Language).

Suite ...