"Objective-C 'Categoria


Muito curto trecho: gravar uma imagem no álbum de fotos

Uma maneira fácil de guardar uma imagem na foto do interior do nosso dispositivo de aplicação (ou carregados remotamente):

Leia mais ...

NSURLConnection: Exemplo de utilização

NSURLConnection permite realizar uma cotrollata ligação a um servidor remoto. Para usá-lo:

1
2
3
4
5
6
7
8
9
10
11
/ / Os objectos suficiente para realizar uma 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]];
/ / O delegado irá responder a estados de conexão
NSURLConnection alloc ] initWithRequest : urlRequest delegate : self ] ; URLConnection = [[ NSURLConnection alloc] initWithRequest: urlRequest delegado: auto];

Aqui estão os métodos de delegado para verificar o status da conexão:

[Cc_objc]

Leia mais ...

Muito curto trecho: Objective-C, Selector de NSString

Objective-C é uma linguagem maravilhosa que permite-lhe fazer coisas incríveis. Um dos aspectos mais interessantes é a sua chamada dinâmica de métodos (mensagens). É possível, de facto, para obter o endereço de uma mensagem de uma corda.

Leia mais ...

Muito curto trecho: UIWebView, e exibir arquivos PDF dentro

O objecto UIWebView pode ser usado para a exibição de numerosos arquivos. Por exemplo, você pode usá-lo para exibir - assim como filmes QuickTime ou do YouTube - arquivos PDF ou HTML em nosso próprio código.

Leia mais ...

NSString

NSString é uma classe muito poderosa, deixe-me mostrar-lhe algumas das propriedades mais utilizados:

printf ()

1
2
/ / Printf ()
output = [ NSString stringWithFormat : @ "%@ / %@" , @ "primo" , @ "secondo" ] ; NSString * output = [ NSString stringWithFormat: @ "% @% / @", @ "primeiro", @ "segunda"];

Execute o split ()

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

Converter de string para valor

1
2
3
/ / Convertendo
doubleString = @ "123" ; NSString * doubleString @ = "123";
[ doubleString doubleValue ] ; valor duplo = [doubleString doubleValue];

Dentro de uma seqüência

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ Substring /
searchString = @ "age" ; NSString * searchString = @ "idade";

beginsTest = @ "Agencies" ; NSString * beginsTest @ = "agências";
[ beginsTest rangeOfString : searchString NSRange prefixRange = [beginsTest rangeOfString: searchString
NSAnchoredSearch | NSCaseInsensitiveSearch ) ] ; opções: (NSAnchoredSearch | NSCaseInsensitiveSearch)];

/ / PrefixRange = {0, 3}

endsTest = @ "BRICOLAGE" ; NSString * endsTest = @ "DIY";
[ endsTest rangeOfString : searchString NSRange suffixRange = [endsTest rangeOfString: searchString
NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch ) ] ; opções: (NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch)];

/ / SuffixRange = {6, 3}

Leia mais ...

Muito curto trecho: compor e-mails para um iPhone, iPod ou iPad

Para compor um e-mail no iPhone / iPod basta adicionar o quadro MessageUI . No nosso controlador para entrar a inclusão do quadro e aplicar o protocolo MFMailComposeViewControllerDelegate :

Leia mais ...

Objective-C métodos de classe e alloc auto

davanti al prototipo, tipo: Quando definir e usar métodos (mensagens) em Objective-C, que são frequentemente confrontados com a sintaxe curiosa que mostra um sinal - ou + na frente do protótipo, digite:

1
2
3
4
5
6
7
/ / Na definição
void ) mioMessaggio; - (Void) mioMessaggio;

/ / Da mesma forma, na aplicação
void ) mioMessaggio { - (Void) {mioMessaggio
/ / ...
}

Ou:

1
2
3
4
5
6
7
/ / Na definição
void ) mioMessaggio; + (Void) mioMessaggio;

/ / Da mesma forma, na aplicação
void ) mioMessaggio { + (Void) {mioMessaggio
/ / ...
}

A diferença reside no facto de que os métodos definidos pelo símbolo - são métodos, por exemplo, e, em seguida, ligado a um objecto. Os métodos definidos pelo símbolo + são chamados de métodos de classe, como pode ser realizada sem alocação e instanciar o objeto em questão.

sono due classi, molto usate, che contengono svariati metodi di classe. NSString ou UIView duas classes, amplamente utilizado, que contêm vários métodos da classe. Métodos de classe são usados ​​constantemente, como quando inicializar ou atribuir qualquer objeto:

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

O método alloc é um exemplo clássico, presente em todos os objectos e, como evidenciado pelo código, é um método de classe tal como reivindicado antes da aplicação do próprio objecto.

Métodos de classe pode ser útil em muitos casos, particularmente quando criamos nosso objeto e queremos alocar e inicializar-lo em menos linhas de código possível. Imagine ter que recolher uma matriz em um conjunto de objetos definidos por nós. Nós definimos o nosso primeiro objeto, escrever o código da forma mais simples, sem usar os métodos da classe:

1
2
3
4
5
6
7
8
9
10
/ DEFINIÇÃO / a interface em myObject.h
# Importar <Foundation/Foundation.h>

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

nonatomic, retain ) NSString * name; @ Property (nonatomic, reter) NSString * nome;
nonatomic, retain ) NSString * lastname; @ Property (nonatomic, reter) NSString * apelido;

A aplicação, no caso mais simples, pode ser nada ou:

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

# Importar "myObject.h"
@ Implementação myObject

@ Name sintetizar, sobrenome;

void ) dealloc { - (Void) {dealloc
; [Lançamento Nome];
; [Lançamento Lastname];
; [Super dealloc];
}

Quando é que vamos usar o nosso objeto, podemos usar código como este:

1
2
3
[ myObject alloc ] ; myObject * obj = [myObject alloc];
"Mario" ; obj.name @ = "João";
"Rossi" ; obj.lastname @ = "Smith";

Se quiséssemos criar muitos objetos deste tipo, e colocá-los em um NSArray , a situação torna-se um pouco estranho:

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

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

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

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

per aggiungere man mano gli oggetti nel nostro elenco. Poderia melhorar o código criando um loop for ou usando um NSMutableArray adicionar como objetos em nosso diretório. . No entanto, o migliorebbe situação um pouco, ocasionalmente permanecer fora as configurações de propriedade name e lastname . Seria, então, espontânea, para começar, adicione um método - objeto - initWithName que lhe permitem saltar para as configurações de propriedade, as coisas semplificandoci um pouco. No arquivo de implementação myObject.m acrescentar:

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;
}
retornar auto;
}

Ao fazer isso, temos melhorado a situação, eles podem agora escrever:

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

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

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

, necessari per l'inserimento nell'array e liberare la memoria. Abbiammo ainda assim ponteiros objA e objB , necessários para a entrada na matriz e memória livre. Desejando que pudéssemos entrar directamente na criação de um objeto em preencher a matriz, com autorelease de memória livre, mas o código ainda não ocioso. Deixe-me demonstrar como resolver o problema com um método de classe. Primeiro de tudo, substituir o nosso - (id)initWidthName com:

1
2
3
4
5
6
7
8
9
10
id ) initWithName : ( NSString * ) name lastname : ( NSString * ) lastname { + InitWithName (Id): ( NSString *) lastname nome: ( NSString *) {apelido
myObject * item;

item = [ [ self alloc ] init ] ) { if (item = [[auto alloc] init]) {
/ / Init
item.name = nome;
item.lastname = sobrenome;
}
item autorelease ] ; retorno [item autorelease];
}

Ao fazer isso, criamos um método de classe que aloca (em autorelase) e iniziallizza nosso assunto, antes que você tenha o ponteiro para a instância. O código usado é então:

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

Muito, muito melhor ...

Leia mais ...

iPad: telas de boot do punho

Em Apple iPhone e iPod foram usados ​​para gerenciar um único arquivo de imagem para carregar o aplicativo, o arquivo Default.png . Em iPad Apple, no entanto, a gestão diferente dell'orientamente requer a adoção de múltiplos arquivos de imagem, para ter certeza que você ver a tela inicial all'orientamente corrigido para o dispositivo. Durante a inicialização do aplicativo, como aconteceu com o iPhone, não é possível tirar o código para "maravilha" que o dispositivo orientado. Felizmente, ele foi introduzido no carregamento automático de arquivos especiais sobre a orientação:

Os ficheiros são suportados, para além do clássico Default.png que nunca se deve usar porque é dimensionado e deformada de acordo com a orientação, são:

  • Padrão Portrait.png-
  • Padrão PortraitUpsideDown.png-
  • Padrão Landscape.png-
  • Padrão LandscapeLeft.png-
  • Padrão LandscapeRight.png-

e LandscapeRight possono essere utilizzate per determinare orietamento e verso di quest'ultimo. As versões PortraitUpsideDown , LandscapeLeft e LandscapeRight pode ser usado para determinar orietamento e para o último.

Para o aplicativo começa, então, como recomendado pela Apple, é bom para "redesenhar" - se necessário - as nossas opiniões agindo dentro application:didFinishLaunchingWithOptions .

Leia mais ...

Personalize as seções em um UITableView Agrupados

potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Quando usamos um UITableView estilo Grouped podemos precisar para personalizar o layout de títulos das seções, como a Califórnia ou Nova Iorque o exemplo abaixo.

UITableView

Para fazê-lo, por favor use o seguinte código, colocando-a ao delegado, ou seja, a classe que responde ao protocolo UITableViewDelegate :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/ / Eu retornar a minha exibição personalizada, neste caso um objeto
/ Tipo / UILabel
UIView * ) tableView : ( UITableView * ) tableView - (UIView *) tableView: (UITableView *) tableView
NSInteger ) section { viewForHeaderInSection: seção (NSInteger) {

[ [ [ 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 @ = "Seção", / / Replace com uma matriz, como de costume
UIColor whiteColor ] ; label.textColor = [UIColor whiteColor];
UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor];
; label.opaque = NO;

voltar rótulo;
}
/ / Devemos também apoiar esta mensagem não irá funcionar
CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView
NSInteger ) section { heightForHeaderInSection: seção (NSInteger) {
; voltar 44;
}

É também importante incluir heightForHeaderInSection , não irá funcionar.

Notas de Interesse

o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . Na criação do nosso UILabel , querendo que também poderia ser um objeto mais complexo, como um UIView ou UIImageView , eu usado para inicializar o frame CGRectZero o que corresponde a CGRectMake(0,0,0,0) .

Leia mais ...

Como chegar Latitude e Longitude em Objective-C

O quadro MapKit oferece muitos recursos úteis, com exceção do retorno de Latitude e Longitude de um endereço. Em JavaScript, por exemplo, você pode usar o serviço prestado pelo Google Geocoding e discutidos em Google Maps: Como obter Latitude e Longitude de um endereço . Em Apple iPhone ou iPad, no entanto, você pode superar o obstáculo usando um diferentes serviços do Google. Especificamente, você pode chamar diretamente o url:

1
http://maps.google.com/maps/geo?q = [endereço] saída & = csv

Onde está [indirizzo] para entrar na cadeia com o endereço que deseja transformar as coordenadas. A saída retornado é do tipo:

1
200,8,41.9128300,12.2241172

). O primeiro valor, 200 , indica que tudo correu bem ( 200 OK ). A segunda, 8 , é o parâmetro de precisão Google (1-10). Os dois últimos valores são, por fim, a latitude ea longitude. Agora vemos um protótipo de um método pode ser incluído nas nossas candidaturas:

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 *) {endereço
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 Endereço: NSUTF8StringEncoding]];

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

/ / Int zoom = 0;
0.0 ; latitude duplo = 0,0;
0.0 ; double longitude = 0,0;

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

retornar a localização;
}

Notas de Interesse

, alla stregua della funzione explode ( ) del PHP per intenderci. A seqüência retornada em locationString é "dividida" pelo método componentsSeparatedByString , como a função explode ( ) do PHP por exemplo. No exemplo eu propus que entrei - mas comentou - o código para recuperar até mesmo a precisão parâmetro Google, precisão ou fator de escala, denotada por zoom .

Fonte como

Para completar, eu fiz um pedido pequeno exemplo com o qual você pode tentar o método proposto acima, entrar em qualquer endereço eo iPhone vai exibir no mapa.


Baixar Fonte

Agradeço a equipe devAPP para a inspiração deste artigo.

Leia mais ...



Pare SOPA