Catégorie 'Objective-C'


Très court extrait: enregistrement d'une image dans l'album photo

Un moyen facile d'enregistrer une image dans l'album photo de l'appareil à l'intérieur de notre application (ou chargé à partir distance):

Suite ...

NSURLConnection: Exemple d'utilisation

NSURLConnection permet de contrôler à partir d'une connexion à un serveur distant. Pour l'utiliser il suffit de:

1
2
3
4
5
6
7
8
9
10
11
/ / Les objets suffisant pour effectuer une NSURLConnection
urlConnection; NSURLConnection * URLConnection;
mutableData; NSMutableData mutableData *;

/ / ...

urlString = @ "http://www.miodominio.com/documento.txt" ; NSString * urlString @ = "http://www.miodominio.com/documento.txt";

urlRequest = [ NSURLRequest requestWithURL : [ NSURL URLWithString : urlString ] ] ; NSURLRequest URLRequest = * [ NSURLRequest requestWithURL: [ NSURL URLWithString: urlString]];
/ / Le délégué sera de répondre aux états de la connexion
NSURLConnection alloc ] initWithRequest : urlRequest delegate : self ] ; URLConnection = [[ NSURLConnection alloc] initWithRequest: délégué URLRequest: self];

Voici les méthodes délégué à vérifier l'état de la connexion:

[Cc_objc]

Suite ...

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 ...

NSString

NSString est une classe puissante, laissez-moi vous montrer quelques-unes des propriétés les plus utilisées:

printf ()

1
2
/ / Printf ()
output = [ NSString stringWithFormat : @ "%@ / %@" , @ "primo" , @ "secondo" ] ; NSString * Sortie = [ NSString stringWithFormat: @ "% @ /% @", @ "première", @ "deuxième"];

Exécutez le split ()

1
2
3
/ / Split () / explode ()
list = @ "Norman, Stanley, Fletcher" ; NSString * list = @ "Norman Stanley Fletcher";
listItems = [ list componentsSeparatedByString : @ ", " ] ; NSArray * ListItems = [liste componentsSeparatedByString: @ ""];

Convertir de chaîne en valeur

1
2
3
/ / Conversion
doubleString = @ "123" ; NSString * @ doubleString = "123";
[ doubleString doubleValue ] ; double valeur = [doubleString doubleValue];

Au sein d'une chaîne de

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Sous-chaîne
searchString = @ "age" ; NSString * @ searchString = «âge»;

beginsTest = @ "Agencies" ; NSString * beginsTest @ = "Agences";
[ beginsTest rangeOfString : searchString NSRange prefixRange = [beginsTest rangeOfString: searchString
NSAnchoredSearch | NSCaseInsensitiveSearch ) ] ; options: (NSAnchoredSearch | NSCaseInsensitiveSearch)];

/ / PrefixRange = {0, 3}

endsTest = @ "BRICOLAGE" ; NSString * endsTest = @ "bricolage";
[ endsTest rangeOfString : searchString NSRange suffixRange = [endsTest rangeOfString: searchString
NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch ) ] ; options: (NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch)];

/ / SuffixRange = {6, 3}

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 ...

iPad: écrans de démarrage gérer

Apple iPhone et iPod ont été utilisées pour gérer un seul fichier image à charger l'application, le fichier Default.png . Apple iPad, cependant, l'orientation de gestion différentes nécessite l'utilisation de plusieurs fichiers image, pour être sûr que vous voyez l'écran de démarrage correctement fondé sur l'orientation de l'appareil. Durant démarrage de l'application, comme ce fut le cas pour l'iPhone, il n'est pas possible d'intervenir pour le code pour "étonnant" que l'appareil orienté. Heureusement, il a été introduit dans le chargement automatique des fichiers spéciaux en fonction de l'orientation:

Les fichiers sont actuellement pris en charge, en plus de la classique Default.png ne recommandons pas à utiliser car il est redimensionné et déformé en fonction de l'orientation, sont les suivants:

  • Default-Portrait.png
  • Default-PortraitUpsideDown.png
  • Default-Landscape.png
  • Default-LandscapeLeft.png
  • Default-LandscapeRight.png

e LandscapeRight possono essere utilizzate per determinare orietamento e verso di quest'ultimo. Versions PortraitUpsideDown , LandscapeLeft et LandscapeRight peut être utilisée pour déterminer orietamento et vers celui-ci.

Application à démarrer, puis, comme recommandé par Apple, il est bon "refonte" - si nécessaire - nos opinions agissant dans application:didFinishLaunchingWithOptions .

Suite ...

Personnaliser les sections dans un UITableView Groupés

potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Lorsque nous utilisons un UITableView de style Grouped nous pouvons avoir besoin de personnaliser la disposition des titres de sections, comme la Californie ou New York, l'exemple ci-dessous.

UITableView

Pour ce faire, s'il vous plaît utilisez le code suivant, le plaçant dans le délégué, c'est à dire dans la classe qui répond au protocole UITableViewDelegate :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/ / Retourne Afficher mon habitude, dans ce cas, un objet
/ / Type UILabel
UIView * ) tableView : ( UITableView * ) tableView - (UIView *) tableView: (UITableView *) tableView
NSInteger ) section { viewForHeaderInSection: (NSInteger) {section

[ [ [ UILabel alloc ] initWithFrame : CGRectZero ] autorelease ] ; UILabel * label = [[[UILabel alloc] initWithFrame: CGRectZero] autorelease];
UIFont boldSystemFontOfSize : 20 ] ; label.font = [UIFont boldSystemFontOfSize: 20];
label.textAlignment = UITextAlignmentCenter;
UIColor blackColor ] ; label.shadowColor = [UIColor blackColor];
1 , 1 ) ; label.shadowOffset CGSizeMake = (1, 1);
"Sezione" ; // Sostituire con un array come al solito Label.Text @ = "section", / / Remplacer avec un tableau comme d'habitude
UIColor whiteColor ] ; label.textColor = [UIColor whiteColor];
UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor];
; label.opaque = NON;

retour étiquette;
}
/ / Nous devons aussi appuyer ce message ne ​​fonctionne pas autrement
CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView
NSInteger ) section { heightForHeaderInSection: (NSInteger) {section
; retour 44;
}

Il est également important d'inclure heightForHeaderInSection , ne fonctionnera pas.

Notes d'intérêt

o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . Dans la création de notre UILabel , qui pourrait aussi être vouloir un objet plus complexe comme un UIView ou UIImageView , j'ai utilisé pour initialiser le frame CGRectZero correspondant à CGRectMake(0,0,0,0) .

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 ...