Articles taggés avec 'Objective-C'


Très court extrait: Objective-C NSString Selector

Objective-C est un langage merveilleux qui vous permet de faire des choses étonnantes. Un des aspects les plus intéressants est son invocation dynamique des méthodes (des messages). Vous pouvez, en fait, obtenir l'adresse d'un message d'une chaîne.

Suite ...

Très court extrait: UIWebView, et afficher les fichiers PDF dans

L'objet UIWebView peut être utilisé pour afficher plusieurs fichiers. Par exemple vous pouvez l'utiliser pour afficher - ainsi que des films QuickTime ou YouTube - fichier PDF ou HTML inclus dans notre code.

Suite ...

Très court extrait: composition de courrier dans une application iPhone, iPod ou iPad

Pour composer la poste dans une application iPhone / iPod, il suffit d'ajouter le cadre MessageUI . Dans notre contrôleur d'entrer à l'inclusion du cadre et d'adopter le Protocolo MFMailComposeViewControllerDelegate :

Suite ...

Objective-C et de méthodes de classe alloc auto

davanti al prototipo, tipo: Lorsque vous définissez et utiliser des méthodes (des messages) sous Objective-C, nous sommes souvent confrontés avec la syntaxe curieuse qui montre un signe - ou + à l'avant du prototype, tapez:

1
2
3
4
5
6
7
/ / Dans la définition
void ) mioMessaggio; - (Void) mioMessaggio;

/ / De même, dans la mise en œuvre
void ) mioMessaggio { - (Void) {mioMessaggio
/ / ...
}

Ou encore:

1
2
3
4
5
6
7
/ / Dans la définition
void ) mioMessaggio; + (Void) mioMessaggio;

/ / De même, dans la mise en œuvre
void ) mioMessaggio { + (Void) {mioMessaggio
/ / ...
}

La différence est que les méthodes définies par le symbole - sont les méthodes d'instance, alors lié à un objet. Les méthodes définies par le symbole + sont appelées méthodes de classe, car ils peuvent être effectuées sans allouer et d'instancier l'objet en question.

sono due classi, molto usate, che contengono svariati metodi di classe. NSString ou UIView ya deux classes, largement utilisé, qui contiennent plusieurs méthodes de classe. Les méthodes de classe sont utilisés en permanence, comme lorsque nous initialiser ou affecter tout objet:

1
[ UIView alloc ] ; MyView UIView * = [UIView alloc];

La méthode alloc est un exemple classique, présente dans tous les objets et, comme il est évident à partir du code, une méthode de classe est invoqué comme avant affectation de l'objet lui-même.

Les méthodes de classe peuvent être utiles dans de nombreux cas, surtout lorsque nous créons notre objet et nous voulons allouer et l'initialiser en moins de lignes de code que possible. Imaginez avoir à recueillir un certain nombre dans un tableau d'objets définis par nous. Nous définissons notre objet, tout d'abord, l'écriture du code de la manière la plus simple, sans utiliser les méthodes de classe:

1
2
3
4
5
6
7
8
9
10
/ / Définit l'interface de myObject.h
# Import <Foundation/Foundation.h>

NSObject { @ Interface myObject: NSObject {
name; NSString * name;
lastname; NSString * nom;
}

nonatomic, retain ) NSString * name; @ Property (nonatomic, retenir) NSString * name;
nonatomic, retain ) NSString * lastname; @ Property (nonatomic, retenir) NSString * nom;

La mise en œuvre, dans le cas le plus simple, rien ne pouvait être soit:

1
2
3
4
5
6
7
8
9
10
11
12
/ / MyObject.m

# Import "myObject.h"
@ Mise en oeuvre monObjet

Synthétiser le nom @ lastname;

void ) dealloc { - (Void) dealloc {
; [Communiqué] Le nom;
; [Communiqué de LastName];
; [Super dealloc];
}

Lorsque nous arriverons à utiliser notre objet, nous allons utiliser un code comme ceci:

1
2
3
[ myObject alloc ] ; monObjet * obj = [myObject alloc];
"Mario" ; obj.name @ = "John";
"Rossi" ; obj.lastname @ = "Smith";

Si nous voulions créer de nombreux objets de ce type, et les placer dans une NSArray , la situation devient un peu gênant:

1
2
3
4
5
6
7
8
9
10
11
12
[ myObject alloc ] ; objA * monObjet = [myObject alloc];
"Mario" ; objA.name @ = "John";
"Rossi" ; objA.lastname @ = "Smith";

[ myObject alloc ] ; objB * monObjet = [myObject alloc];
"Carlo" ; objB.name @ = "Charles";
"Bianchi" ; objB.lastname @ = "Smith";

elenco = [ NSArray arrayWithObjects : objA, objB, nil ] ; NSArray * liste = [ NSArray arrayWithObjects: objA, objB, nil];

; [ObjA release];
; [ObjB release];

per aggiungere man mano gli oggetti nel nostro elenco. Vous pouvez améliorer le code en créant une boucle for une ou de l'utilisation NSMutableArray ajouter des objets dans notre annuaire. . Toutefois, la situation des migliorebbe peu, quand ils restent en dehors de la propriété des paramètres du name et lastname . Serait alors spontanément, pour commencer, ajoutez une méthode - objet - initWithName qui vous permettra de sauter à des paramètres de propriété, ce qui simplifie les choses un peu. Dans le fichier de mise en œuvre myObject.m ajouter:

1
2
3
4
5
6
7
id ) initWithName : ( NSString * ) stringName lastname : ( NSString * ) stringLastname { - (Id) initWithName: ( NSString *) lastname StringName: ( NSString *) {stringLastname
self = [ super init ] ) { if (self = [super init]) {
self.name = StringName;
self.lastname = stringLastname;
}
le retour de soi;
}

En faisant cela, nous avons amélioré la situation, ils peuvent maintenant écrire:

1
2
3
4
5
6
7
[ [ myObject alloc ] initWithName : @ "Mario" lastname : @ "Rossi" ] ; objA * monObjet = [[monObjet alloc] initWithName: @ "John" lastname: @ "Smith"];
[ [ myObject alloc ] initWithName : @ "Carlo" lastname : @ "Bianchi" ] ; objB * monObjet = [[monObjet alloc] initWithName: @ "Charles" lastname: @ "Smith"];

elenco = [ NSArray arrayWithObjects : objA, objB, nil ] ; NSArray * liste = [ NSArray arrayWithObjects: objA, objB, nil];

; [ObjA release];
; [ObjB release];

, necessari per l'inserimento nell'array e liberare la memoria. Pourtant, encore pointeurs objA et objB , nécessaires à l'entrée dans le tableau et la mémoire libre. Souhaitant que nous pourrions être entrés directement dans la création d'un objet peuplant la matrice, en utilisant autorelease pour libérer de la mémoire, mais le code ne serait toujours pas ralenti. Permettez-moi de démontrer comment résoudre le problème avec une méthode de classe. Tout d'abord nous remplaçons - (id)initWidthName avec:

1
2
3
4
5
6
7
8
9
10
id ) initWithName : ( NSString * ) name lastname : ( NSString * ) lastname { + (Id) initWithName: ( NSString *) Prénom Nom: ( NSString *) {lastname
* monObjet article;

item = [ [ self alloc ] init ] ) { if (item = [[alloc auto] init]) {
/ / Initialisation
item.name = nom;
item.lastname = lastname;
}
item autorelease ] ; retour [élément autorelease];
}

En agissant ainsi nous avons créé une méthode de classe qui alloue (dans autorelase) et celle réellement initiée de notre objet, vous devez d'abord le pointeur vers l'instance. Le code utilisé est alors:

1
2
3
4
elenco = [ NSArray arrayWithObjects : NSArray * liste = [ NSArray arrayWithObjects:
@ "Mario" lastname : @ "Rossi" ] , [InitWithName MyObject: @ "John" lastname: @ "Smith"],
@ "Carlo" lastname : @ "Bianchi" ] , [InitWithName MyObject: @ "Charles" lastname: @ "Smith"],
; nil];

Beaucoup, beaucoup mieux ...

Suite ...

Maker WordPress Plugin

Je suis vraiment heureux d'être en mesure de présenter un aperçu de Maker WordPress Plugin, une application pour Mac OS X (Snow Leopard) qui vous permet de créer un squelette de plugins WordPress en quelques secondes, vous permettant de régler de nombreux paramètres. L'application est encore en développement, mais ne sa base d'emplois et est facilement utilisable et fonctionnel. Certaines fonctionnalités n'ont pas encore été inclus et l'autre est en attente de commentaires de la "quelques" chanceux bêta-testeurs.

Suite ...

Comment obtenir Latitude et Longitude en Objective-C

Le cadre fournit MapKit nombreuses fonctions utiles, sauf le retour de longitude et latitude d'une adresse. En JavaScript, par exemple, vous pouvez utiliser le service fourni par Google de géocodage et discutés dans Google Maps: Comment obtenir Latitude et Longitude partir d'une adresse . Apple iPhone ou iPad, cependant, vous pouvez surmonter cet obstacle en utilisant un des différents services Google. Plus précisément, vous pouvez appeler directement à l'url:

1
http://maps.google.com/maps/geo?q = [adresse] & output = csv

Où est [indirizzo] pour entrer dans la chaîne avec l'adresse que vous voulez transformer les coordonnées. La sortie retournée est de type:

1
200,8,41.9128300,12.2241172

). La première valeur, 200 , indique que tout s'est bien passé ( 200 OK ). La seconde, 8 , Google est le paramètre de précision (1-10). Les deux dernières valeurs sont, enfin, la latitude et la longitude. Maintenant, nous voyons un prototype d'une méthode peut être inclus dans nos applications:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CLLocationCoordinate2D ) getLocationFromAddress : ( NSString * ) address { - (CLLocationCoordinate2D) getLocationFromAddress: ( NSString *) Adresse {
urlString = [ NSString stringWithFormat : @ "http://maps.google.com/maps/geo?q=%@&output=csv" , NSString * urlString = [ NSString stringWithFormat: @ "% @ http://maps.google.com/maps/geo?q = & output = csv"
NSUTF8StringEncoding ] ] ; [StringByAddingPercentEscapesUsingEncoding adresse: NSUTF8StringEncoding]];

listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray * ListItems = [locationString componentsSeparatedByString: @ ""];

/ / Int zoom = 0;
0.0 ; Latitude double = 0,0;
0.0 ; Longitude double = 0,0;

listItems count ] > = 4 && [ [ listItems objectAtIndex : 0 ] isEqualToString : @ "200" ] ) { if ([ListItems count]> = 4 & & [[ListItems objectAtIndex: 0] isEqualToString: @ "200"]) {
/ / Zoom = [[objectAtIndex ListItems: 1] intValue];
listItems objectAtIndex : 2 ] doubleValue ] ; Latitude = [[ListItems objectAtIndex: 2] doubleValue];
listItems objectAtIndex : 3 ] doubleValue ] ; longitude = [[ListItems objectAtIndex: 3] doubleValue];
{ Else {}
/ / Erreur
}
Lieu CLLocationCoordinate2D;
location.latitude = latitude;
location.longitude = longitude;

Lieu de retour;
}

Notes d'intérêt

, alla stregua della funzione explode ( ) del PHP per intenderci. La chaîne retournée dans locationString est "split" par la méthode componentsSeparatedByString , comme la fonction explode ( ) en PHP par exemple. J'ai mis l'exemple que j'ai proposé - mais commenté - le code pour récupérer le paramètre de précision, même Google, la précision ou le facteur d'échelle, notée zoom .

Source comme

Pour être complet, j'ai fait un exemple d'application petits avec lesquels vous pouvez essayer la méthode proposée ci-dessus, entrer d'adresse et de l'iPhone va montrer sur la carte.


Télécharger Source

Je remercie l'équipe devAPP pour l'inspiration de cet article.

Suite ...

setAnimationDidStopSelector: les différents usages et avancées

Dans la plupart des cas, ou parce que nous sommes habitués ou parce que nous avons vu dans les didacticiels et dans certains textes, nous utilisons le setAnimationDidStopSelector de cette manière:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: self];
@selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)];

; myView.alpha = 0;

; [CommitAnimations UIView];

/ /

void ) removeView { - (Void) {removeView
; [MyView removeFromSuperview];
}

come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. Dans le code ci-dessus l' setAnimationDelegate mis self en tant que délégué et par setAnimationDidStopSelector envoie un message removeView lorsque l'animation est terminée. Le code lui-même est correct, cependant, fait usage d'une définition de message ( removeView ) qui pourraient être omis. Maintenant, voici le même code, avec le même effet, sans le message removeView :

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)];

; myView.alpha = 0;

; [CommitAnimations UIView];

! La chose intéressante à propos de cette approche est que myView pourrait être une sous-classe de UIView ! Il peut donc être une classe personnalisée avec nos propres messages et, comme indiqué, facilement appelables depuis setAnimationDidStopSelector . En outre, le setAnimationDidStopSelector sélecteurs d'accord avec les paramètres:

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1:)];

; myView.alpha = 0;

; [CommitAnimations UIView];

Cet exemple peut être étendu à tous les cas ici, où nous installons un délégué, Atro n'est pas un pointeur vers une instance de n'importe quel objet.

Suite ...

Comment localiser les images et les vues dans Interface Builder

Après avoir expliqué comment localiser nos chaînes dans Xcode , il est facile de voir maintenant comment - en appliquant la même technique - de localiser et de visualiser des images / interfaces créées avec Interface Builder.

Localiser les ressources graphiques

Le processus, tel que mentionné, est la même, si nous avons une image déjà inclus dans nos ressources, ou qu'ils insèrent un nouveau, et nous voulons de «localiser» - qui est, de gérer deux ou plusieurs images sur la base des langues prises en charge - il suffit de cliquer sur le bouton Image de droite ( Adium.png dans cet exemple) et sélectionnez Get Info:

Créer un fichier localisable on clique en bas à gauche.

On clique sur Ajouter et insérez la localisation Italian :

Afin d'obtenir:

esattamente come accadeva con il testo: Notre image est déplacée (physiquement, l'une des rares fois où cela arrive nell'alberatura Xcode est réfléchi sur le système de fichiers) dans le cadre des dossiers virtuels English.lproj et Italian.lproj exactement comme cela s'est produit avec le texte:

contiene una stessa versione dell'immagine. A ce stade, chacun des dossiers English.lproj et Italian.lproj contient la même version de l'image. Cette image est manipulée dans Interface Builder, où nous verrons - par défaut - la version anglaise.
À ce stade, juste écraser un (ou deux fichiers Adium.png ) pour obtenir un emplacement d'images «flash».

Localisez le fichier XIB

Même les interfaces construites avec Interface Builder peuvent être situés dans leur intégralité, lorsque cela est jugé nécessaire. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: La procédure est identique à celui effectué avec les capacités graphiques: ajouter un ViewController (par exemple infoViewController ) interface XIB, nous le sélectionner, choisissez Obtenir des informations dans le menu contextuel, donner l'localisables fichier, ajoutez la localisation italienne:

ViewController

En cliquant ou en italien Italiano va ouvrir Interface Builder! ) all'interno della classica cartella Classes . Cette fois, le système de fichiers, vous remarquerez que vous avez créé deux répertoires ( English.lproj et Italian.lproj ) dans le dossier classes classiques. Les deux auront leurs fichiers infoViewController.xib . Le confort dans ce domaine, clairement résolue dans le code, et quand nous allons instancier notre code du contrôleur, nous aurons un «propre» comme ceci:

1
2
[ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc];
info.view ] ; [Self.view addSubview: info.view];

Comme vous pouvez le voir il n'ya aucune trace d'aucune déclaration concernant l'emplacement, entièrement gérées par le système. Les deux interfaces, bien sûr, peuvent être complètement différents, qui sont en vigueur que deux fichiers séparés XIB.

Suite ...

Comment créer votre propre protocole avec les déléguées

Même dans le tutoriel le plus simple, vous trouverez l'utilisation de protocoles. Il arrivera certainement pour beaucoup dans votre contrôleur afin d'utiliser un protocole, la saisie, à côté de la définition de l'interface, une déclaration similaire à:

1
2
3
UIViewController <uiwebviewdelegate> { @ Interface myViewController: UIViewController {<uiwebviewdelegate>
...
}

Suite ...

Très court extrait: obtenir la sortie d'une URL en Objective-C

Peut-être que je devrais écrire "Très très très, courts extraits», cependant, est une excellente et pratique "truc" pour montrer ce que je suis. L'exécution de la "deux" lignes de code ci-dessous, vous pouvez obtenir la sortie d'une URL et de le manipuler.

Suite ...