<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mac Developers &#187; Programação</title>
	<atom:link href="http://www.macdevelopers.com.br/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.macdevelopers.com.br</link>
	<description>Seu portal sobre desenvolvimento para Mac e IPhone</description>
	<lastBuildDate>Thu, 18 Feb 2010 19:17:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Nova versão do Cocos2d v0.99.0 liberada!</title>
		<link>http://www.macdevelopers.com.br/2010/02/18/nova-versao-do-cocos2d-v0-99-0-liberada/</link>
		<comments>http://www.macdevelopers.com.br/2010/02/18/nova-versao-do-cocos2d-v0-99-0-liberada/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:17:47 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[cocos2d]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iPhone SDK]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=244</guid>
		<description><![CDATA[Depois de 123 dias a equipe de desenvolvimento do framework para desenvolvimento de jogos em 2D para iPhone SDK liberou uma nova versão, a verão 0.99.0 teve várias mudanças, correções e melhorias feitas no framework. Esta nova versão já oferece suporte ao novo iPad mas para isto é preciso ter instalado o SDK 3.2 beta [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "pub-9770332445897340";
/* 468x60, criado 28/06/09 */
google_ad_slot = "0206052006";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p><p>Depois de 123 dias a equipe de desenvolvimento do framework para desenvolvimento de jogos em 2D para iPhone SDK liberou uma nova versão, a verão 0.99.0 teve várias mudanças, correções e melhorias feitas no framework.</p>
<p>Esta nova versão já oferece suporte ao novo iPad mas para isto é preciso ter instalado o SDK 3.2 beta que possui o simulador para iPad.</p>
<p>Aqui você pode ver o post original sobre a nova versão:</p>
<p><a href="http://www.cocos2d-iphone.org/archives/598" target="_blank">http://www.cocos2d-iphone.org/archives/598</a></p>
<p>E aqui você pode ver tudo que mudou nessa nova versão:</p>
<p><a href="http://www.cocos2d-iphone.org/wiki/doku.php/release_notes:0_99_0" target="_blank">http://www.cocos2d-iphone.org/wiki/doku.php/release_notes:0_99_0</a></p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2010/02/18/nova-versao-do-cocos2d-v0-99-0-liberada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando jogos em 2D para iPhone &#8211; Parte 1</title>
		<link>http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/</link>
		<comments>http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 00:43:47 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[cocos2d]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[iPod Touch]]></category>
		<category><![CDATA[jogos]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=228</guid>
		<description><![CDATA[Sem dúvida o iPhone é uma ótima plataforma para criar jogos e não é por menos que a maioria dos aplicativos mais vendidos na app store são jogos. Os recursos como multi-touch, acelerômetro, GPS e etc contribuem para cada vez mais termos jogos mais criativos e divertidos. Nesta primeira parte do artigo irei falar um [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/18/nova-versao-do-cocos2d-v0-99-0-liberada/' rel='bookmark' title='Permanent Link: Nova versão do Cocos2d v0.99.0 liberada!'>Nova versão do Cocos2d v0.99.0 liberada!</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Sem dúvida o iPhone é uma ótima plataforma para criar jogos e não é por menos que a maioria dos aplicativos mais vendidos na app store são jogos. Os recursos como multi-touch, acelerômetro, GPS e etc contribuem para cada vez mais termos jogos mais criativos e divertidos.</p>
<p>Nesta primeira parte do artigo irei falar um pouco sobre o framework cocos2d e como utilizá-lo no XCode. Na segunda parte do artigo tentarei mostrar em um pequeno exemplo como explorar este framework para criar jogos em 2D para o iPhone SDK.</p>
<p>O cocos2d é um framework open source para desenvolvimento de jogos 2d baseado no OpenGL ES 1.1 e ele suporta gerenciamento de cenas, transição entre cenas, sprites, actions (comportamentos), menus e botões, renderização de textura, suporta a sons e muitas outras opções.</p>
<p>O primeiro passo é ter o XCode instalado no seu mac, para este tutorial estou utilizando a versao 3.2.1.</p>
<p>Continuando, seguirei para o <a href="http://www.cocos2d-iphone.org/" target="_blank">site do cocos2d</a> e farei o <a href="http://www.cocos2d-iphone.org/download" target="_blank">download</a> da versão 0.8.2 do framework. Apos o arquivo ser baixado vamos instalá-lo para utilizarmos ele dentro do XCode.</p>
<p>Começarei descompactando o arquivo, depois abra o Terminal.app e va ao diretório do framework descompactado, lá tera um arquivo chamado install_template.sh e este deve ser executado para instalar os templates do cocos2d no XCode. Então ainda no Terminal e na pasta citada anteriormente execute o arquivo da seguinte forma:</p>
<pre class="brush: xml;">./install_template.sh</pre>
<p>Pronto, com isso o cocos2d já pode ser utilizado dentro do XCode. Abra o XCode e veja que agora existem templates disponíveis para criar aplicativos para iPhone SDK utilizando cocos2d.</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-9.39.33-AM.png"><img class="alignnone size-medium wp-image-233" title="cocos2d template" src="http://www.macdevelopers.com.br/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-9.39.33-AM-300x243.png" alt="cocos2d template" width="300" height="243" /></a></p>
<p>Agora crie uma cocos2d Application, esse template irá criar uma pequena aplicação de demonstração (hello world) do framework. Basta executá-la no simulador e ver o resultado.</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-10.34.58-PM.png"><img class="alignnone size-medium wp-image-237" title="Cocos2d Hello World" src="http://www.macdevelopers.com.br/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-10.34.58-PM-300x158.png" alt="Cocos2d Hello World" width="300" height="158" /></a></p>
<p>No próximo artigo iremos explorar alguns recursos do cocos2d e criar uma aplicação de exemplo.<br />
Até o próximo artigo! <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/18/nova-versao-do-cocos2d-v0-99-0-liberada/' rel='bookmark' title='Permanent Link: Nova versão do Cocos2d v0.99.0 liberada!'>Nova versão do Cocos2d v0.99.0 liberada!</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Forwarding Objective-C Messages</title>
		<link>http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/</link>
		<comments>http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 01:50:02 +0000</pubDate>
		<dc:creator>Paulo Poiati</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[OS3.0]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=216</guid>
		<description><![CDATA[Unlike Java or plain C, Objective-C work with messages. You don&#8217;t invoke a method on an object, instead, you send a message to it (like the Ruby language). This approach let a more dynamic behavior. For instance, suppose that you have this class: // SomeClass #import &#60;Cocoa/Cocoa.h&#62; @interface SomeClass : NSObject { } -(void)doSomething @end [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Unlike Java or plain C, Objective-C work with messages. You don&#8217;t invoke a method on an object, instead, you send a message to it (like the Ruby language). This approach let a more dynamic behavior. For instance, suppose that you have this class:</p>
<pre class="brush: cpp;">
// SomeClass
#import &lt;Cocoa/Cocoa.h&gt;
@interface SomeClass : NSObject {
}
-(void)doSomething
@end
#import &quot;SomeClass.h&quot;
#import &quot;Delegate.h&quot;
@implementation SomeClass
-(void)doSomething {
   NSLog(@&quot;doSomething was called on %@&quot;, [self className]);
}
@end
</pre>
<p>As you can see it has only one instance method definition, called &#8220;doSomething&#8221;. Thus, it can respond to the &#8220;doSomething&#8221; message. But, what happens when we send a message that the <span style="text-decoration: underline;"><em>receiver</em></span> can&#8217;t respond to ? Lets make a try:</p>
<blockquote><p>The <span style="text-decoration: underline;"><em>receiver</em></span> is the object that will receive the message. For example, in the following statement:<br />
<code><br />
Dog *dog = [Dog new];<br />
[dog bark];<br />
</code><br />
<span style="text-decoration: underline;"><em>dog</em></span> is the receiver and <span style="text-decoration: underline;"><em>bark</em></span> is the message.</p></blockquote>
<p>Here is our main code:</p>
<pre class="brush: cpp;">
//MethodMissing
#import &lt;Foundation/Foundation.h&gt;
#import &quot;SomeClass.h&quot;
int main (int argc, const char * argv[]) {
  NSAutoreleasePool *pool = [NSAutoreleasePool new];
  SomeClass *someClass = [SomeClass new];
  [someClass doSomething];
  [someClass doSomethingElse];
  [pool drain];
  return 0;
}
</pre>
<p>This code compiles with warnings, because the message &#8220;doSomethingElse&#8221; is not defined in the SomeClass interface. Errors in the Objective-C message dispatch system occurs at runtime. Programmers need to be more careful when dealing with more dynamic languages.</p>
<p>Running the code we got the following result:</p>
<p><code><br />
MethodMissing[1695:a0f] doSomething was called on SomeClass<br />
MethodMissing[1695:a0f] -[SomeClass doSomethingElse]: unrecognized selector sent to instance 0x10010c6c0<br />
MethodMissing[1695:a0f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SomeClass doSomethingElse]: unrecognized selector sent to instance 0x10010c6c0'<br />
</code></p>
<p>Not surprisingly the program crashed. First it invoke our declared &#8220;doSomething&#8221; message and logged the message to the console, all ok until now. But, in line eight we got a NSInvalidArgumentException with the error &#8220;-[SomeClass doSomethingElse]: unrecognized selector sent to instance 0x10010c6c0&#8243;.</p>
<p>This error message is very readable, the problem is that, there isn&#8217;t any message that respond to &#8220;doSomethingElse&#8221; in the class &#8220;SomeClass&#8221;, even at runtime.</p>
<p>And we got to the key topic of this post. We can handle unrecognized selectors messages and do a special treatment when it arrive to the receiver. How we do that ?</p>
<p>We need to overwrite two methods from the NSObject class in the <span style="text-decoration: underline;"><em>receiver</em></span> class:<br />
<em><strong>-(void)forwardInvocation:(NSInvocation *)invocation</strong></em><strong> </strong><br />
<em><strong>-(NSMethodSignature*)methodSignatureForSelector:(SEL)selector</strong></em><strong> </strong></p>
<blockquote><p>An <em><span style="text-decoration: underline;">NSInvocation</span></em><span style="text-decoration: underline;"> </span> is an Objective-C message rendered static, that is, it is an action turned into an object. <em><span style="text-decoration: underline;">NSInvocation</span></em><span style="text-decoration: underline;"> </span> objects are used to store and forward messages between objects and between applications.</p></blockquote>
<p>Now our classes looks like this:</p>
<pre class="brush: cpp;">
// ForwardClass
#import &lt;Cocoa/Cocoa.h&gt;
@interface ForwardClass : NSObject {
}
-(void)doSomethingElse;
@end
#import &quot;ForwardClass.h&quot;
@implementation ForwardClass
-(void)doSomethingElse {
	NSLog(@&quot;doSomething was called on %@&quot;, [self className]);
}
@end
</pre>
<pre class="brush: cpp;">
// SomeClass
#import &lt;Cocoa/Cocoa.h&gt;
@interface SomeClass : NSObject {
	id forwardClass;
}
-(void)doSomething;
@end
#import &quot;SomeClass.h&quot;
#import &quot;ForwardClass.h&quot;
@implementation SomeClass
-(id)init {
	if (self = [super init]) {
		forwardClass = [ForwardClass new];
	}
	return self;
}
-(void)doSomething {
	NSLog(@&quot;doSomething was called on %@&quot;, [self className]);
}
-(void)forwardInvocation:(NSInvocation *)invocation {
	if (! forwardClass) {
		[self doesNotRecognizeSelector: [invocation selector]];
	}
	[invocation invokeWithTarget: forwardClass];
}
-(NSMethodSignature*)methodSignatureForSelector:(SEL)selector {
	NSMethodSignature *signature = [super methodSignatureForSelector:selector];
	if (! signature) {
		signature = [forwardClass methodSignatureForSelector:selector];
	}
	return signature;
}
@end
</pre>
<p>When an object receive a message it doesn&#8217;t recognize, it wraps the invocation in a NSInvocation object and call the <em><strong>-(void)forwardInvocation</strong></em><strong> </strong> passing it as parameter. But, first, it call the <em><strong>-(NSMethodSignature*)methodSignatureForSelector</strong></em><strong></strong> to get the method signature for the given selector.</p>
<p>Now, running the same program again we got:</p>
<p><code><br />
MethodMissing[523:a0f] doSomething was called on SomeClass<br />
MethodMissing[523:a0f] doSomethingElse was called on ForwardClass<br />
</code></p>
<p>And the program finished without any problems.</p>
<p>There are a lot of uses for this technic, some examples are:</p>
<ul>
<li>Wrap one object in a logger object that intercepts and records the invocation of interesting<br />
messages.</li>
<li>Implement “synthetic” messages that are handled by other methods in your class. Imagine creating a generic database record object that catches any property message it receives (i.e., -saleDate, -setSaleDate:) and automatically translates it into a record query. Instead of coding date = [record getDateFieldWithKey:@"SaleDate"], you could simply write date = [record saleDate], without ever writing a -saleDate method. NSManagedObject and CALayer are examples of classes that implement synthetic properties.</li>
<li> Create an object that forwards the message to a hierarchy of other objects, like a responder chain. Chapter 20 talks about responder chains. The proxy object would search a collection of other objects looking for one that implements the message</li>
</ul>
<p>In a future post I will demonstrate one real world application of this.</p>
<p><strong>Learn more about Paulo Poiati on his blog: </strong><a href="http://blog.paulopoiati.com/" target="_blank"><strong>http://blog.paulopoiati.com/</strong></a></p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Colando um Splash Screen no seu iPhone app</title>
		<link>http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/</link>
		<comments>http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 20:31:17 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Interface Builder]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=206</guid>
		<description><![CDATA[Adicionar um Splash Screen em um aplicativo do iPhone parece ser uma tarefa complicada mas é extremamente simples. Neste artigo vou mostrar duas formas de fazer isso, a primeira irá utilizar toda a lógica do iPhone SDK e com isso não precisaremos codificar nada, já na segunda a nossa aplicação irá gerenciar o splash e [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/' rel='bookmark' title='Permanent Link: Incluindo um ícone no seu aplicativo para iPhone'>Incluindo um ícone no seu aplicativo para iPhone</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Adicionar um Splash Screen em um aplicativo do iPhone parece ser uma tarefa complicada mas é extremamente simples.</p>
<p>Neste artigo vou mostrar duas formas de fazer isso, a primeira irá utilizar toda a lógica do iPhone SDK e com isso não precisaremos codificar nada, já na segunda a nossa aplicação irá gerenciar o splash e por conta disso teremos que codificar um pouco.</p>
<p>Nos exemplos desse artigo irei utilizar a seguinte imagem como splash screen:</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/12/Default.png"><img class="alignnone size-full wp-image-207" title="Splash Screen" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/12/Default.png" alt="Splash Screen" width="320" height="480" /></a></p>
<p>Esta imagem deve ter o nome <strong>Default.png</strong>, vou criar um novo aplicativo para iPhone SDK do tipo <strong>View-Based Application</strong> chamado <strong>splash-screen</strong> e adicionar esta esta imagem na pasta chamada <strong>Resources</strong> e pronto a primeira forma já esta pronto. É só rodar o aplicativo no simulador e o splash vai ser apresentado no carregamento do aplicativo.</p>
<p>Na outra forma, teremos que codificar um pouco então abra a interface <em>splash_screenViewController.h</em> e adicione dois métodos e um novo atributo:</p>
<pre class="brush: cpp;">
@interface iCrazyFaceViewController : UIViewController {
IBOutlet UIView *splashScreenView;
}

- (void)showSplash;
- (void)hideSplash;

@end
</pre>
<p>Agora na classe <em>splash_screenViewController.m</em> vamos colocar a implementação desses métodos:</p>
<pre class="brush: cpp;">
-(void)showSplash
{
UIViewController *modalViewController = [[UIViewController alloc] init];
modalViewController.view = splashScreenView;
[self presentModalViewController:modalViewController animated:NO];
[self performSelector:@selector(hideSplash) withObject:nil afterDelay:2.0];
}

//hide splash screen
- (void)hideSplash{
[[self modalViewController] dismissModalViewControllerAnimated:YES];
}
</pre>
<p>Abra pelo <strong>Interface Builder</strong> o arquivo <em>splash_screenViewController.xib</em>, adicione uma nova view e renomeie-a para SplashScreenView.<br />
Nesta nova view criada, adicione um <strong>UIImageView</strong> e na propriedade image desse componente selecione a nossa imagem Default.png.<br />
Conforme imagem a seguir, vamos fazer a ligação da view (SplashScreenView) com o Outlet que criamos na classe iCrazyFaceViewController chamado splashScreenView.</p>
<div id="attachment_209" class="wp-caption alignnone" style="width: 310px"><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/12/Screen-shot-2009-12-06-at-5.48.55-PM.png"><img class="size-medium wp-image-209" title="Ligando outlet pelo interface builder" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/12/Screen-shot-2009-12-06-at-5.48.55-PM-300x187.png" alt="Ligando outlet pelo interface builder" width="300" height="187" /></a><p class="wp-caption-text">Ligando outlet pelo interface builder</p></div>
<p>Pronto, o exemplo já está pronto! Salve o arquivo no Interface Builder, volte para o Xcode e execute a aplicação para conferir o resultado. <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O projeto criado neste exemplo está disponível para download no git:</p>
<p><a href="http://github.com/rlazoti/iphonesdk-splash-screen" target="_blank">http://github.com/rlazoti/iphonesdk-splash-screen</a></p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/' rel='bookmark' title='Permanent Link: Incluindo um ícone no seu aplicativo para iPhone'>Incluindo um ícone no seu aplicativo para iPhone</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Problema com iPhone OS 3.0.1 &#8211; No provisioned iPhone OS device is connected</title>
		<link>http://www.macdevelopers.com.br/2009/08/13/problema-com-iphone-os-3-0-1-no-provisioned-iphone-os-device-is-connected/</link>
		<comments>http://www.macdevelopers.com.br/2009/08/13/problema-com-iphone-os-3-0-1-no-provisioned-iphone-os-device-is-connected/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 12:01:44 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone OS]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OS3.0]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=157</guid>
		<description><![CDATA[Despois que atualizei meu iPhone para a última versão do seu sistema operacional disponível ( 3.0.1 ), não conseguia mais testar minhas aplicações para iPhone desenvolvidas no xCode, pois sempre que tentava rodar a aplicação diretamene no iPhone eu recebia a seguinte mensagem: Assim que vi esta mensagem lembrei que ja existia uma nova versão [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/' rel='bookmark' title='Permanent Link: Incluindo um ícone no seu aplicativo para iPhone'>Incluindo um ícone no seu aplicativo para iPhone</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Despois que atualizei meu iPhone para a última versão do seu sistema operacional disponível ( 3.0.1 ), não conseguia mais testar minhas aplicações para iPhone desenvolvidas no xCode, pois sempre que tentava rodar a aplicação diretamene no iPhone eu recebia a seguinte mensagem:</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/iPhone301Fail.jpg"><img class="aligncenter size-full wp-image-158" title="iPhone301Fail" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/iPhone301Fail.jpg" alt="iPhone301Fail" width="422" /></a></p>
<p>Assim que vi esta mensagem lembrei que ja existia uma nova versão do iPhone SDK 3.1 beta3 e que já deveria dar suporte para a versão 3.0.1 do OS. Engano meu, apos fazer o download de cerca de 2,5Gb do novo SDK e instalá-lo vi que o problema continuou.</p>
<p>Então resolvi pedir ajuda ao oráculo ( Google ) e foi então que encontrei uma forma simples de resolver este problema na qual vou mostrar aqui para caso alguém mais precise.</p>
<p>O primeiro passo é ir até a pasta /Developer/Platforms/iPhoneOS.platform/DeviceSupport/ conforme imagem abaixo:</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd1fail.jpg"><img class="aligncenter size-full wp-image-159" title="cmd1fail" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd1fail.jpg" alt="cmd1fail" width="630" /></a></p>
<p>Depois vamos listar ( comando ls ) tudo que existe dentro dessa pasta e procurar por uma pasta chamada <strong>3.0</strong></p>
<p><strong><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd2fail.jpg"><img class="aligncenter size-full wp-image-160" title="cmd2fail" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd2fail.jpg" alt="cmd2fail" width="630" /></a><br />
</strong></p>
<p>Agora basta criar um &#8220;link simbólico&#8221; chamado 3.0.1 da pasta 3.0 conforme comando abaixo:</p>
<p><a href="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd3fail.jpg"><img class="aligncenter size-full wp-image-161" title="cmd3fail" src="http://www.macdevelopers.com.br/wp-content/uploads/2009/08/cmd3fail.jpg" alt="cmd3fail" width="630"" /></a></p>
<p>Tudo pronto, agora é só reiniciar o XCode que ele voltará a reconhecer seu iPhone! <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/' rel='bookmark' title='Permanent Link: Incluindo um ícone no seu aplicativo para iPhone'>Incluindo um ícone no seu aplicativo para iPhone</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/08/13/problema-com-iphone-os-3-0-1-no-provisioned-iphone-os-device-is-connected/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Incluindo um ícone no seu aplicativo para iPhone</title>
		<link>http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/</link>
		<comments>http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 12:29:24 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Interface Builder]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=132</guid>
		<description><![CDATA[Esta é umas das partes mais fáceis de fazer em todo o desenvolvimento de um aplicativo usando iPhone SDK, mas nem por isso merece menos atenção afinal um ícone bem feito ajuda muito a despertar a vontade do usuário em utilizar seu aplicativo. Para criar um ícone para um aplicativo do iPhone SDK, precisamos criar [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/08/13/problema-com-iphone-os-3-0-1-no-provisioned-iphone-os-device-is-connected/' rel='bookmark' title='Permanent Link: Problema com iPhone OS 3.0.1 &#8211; No provisioned iPhone OS device is connected'>Problema com iPhone OS 3.0.1 &#8211; No provisioned iPhone OS device is connected</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta é umas das partes mais fáceis de fazer em todo o desenvolvimento de um aplicativo usando iPhone SDK, mas nem por isso merece menos atenção afinal um ícone bem feito ajuda muito a despertar a vontade do usuário em utilizar seu aplicativo.</p>
<p>Para criar um ícone para um aplicativo do iPhone SDK, precisamos criar uma imagem de 57 x 57 pixels.</p>
<p>Você não precisa criar o efeito glass presente na maioria dos ícones presentes no iPhone, pois o iPhone já faz isto para você.</p>
<p>Neste exemplo irei utilizar a seguinte imagem no formato PNG.</p>
<p><img src="http://www.macdevelopers.com.br/wp-content/uploads/2009/07/MacDevelopers.png" alt="Icone MacDevelopers" /></p>
<p>Criei um aplicativo chamado IconTest para iPhone SDK no Xcode sem nenhum codigo, utilizando o template View-Based Application.</p>
<p>Agora temos que arrastar o nosso icone para dentro do Xcode na pasta Resources, com isso sera apresentada uma tela confirmando a inclusão desse novo arquivo conforme a imagem a seguir:</p>
<p><img src="http://www.macdevelopers.com.br/wp-content/uploads/2009/07/addIcon1.jpg" alt=""  width="547" /></p>
<p>Agora o ícone ja e encontra disponível dentro do aplicativo conforme podemos ver na imagem a seguir:</p>
<p><img src="http://www.macdevelopers.com.br/wp-content/uploads/2009/07/addIcon2.jpg" alt="" width="547" /></p>
<p>E para finalizar, vamos informar o nosso icone na propriedade icon file do arquivo IconTest-Info.plist:</p>
<p><img src="http://www.macdevelopers.com.br/wp-content/uploads/2009/07/addIcon3.jpg" alt="" width="547" /></p>
<p>Pronto, agora vamos executar o aplicativo e conferir o resultado:</p>
<p><img src="http://www.macdevelopers.com.br/wp-content/uploads/2009/07/addIcon4.jpg" alt="" /></p>
<p>Com isso, podemos ver como é simples incluir um ícone em aplicativos no iPhone SDK.</p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/06/colando-um-splash-screen-no-seu-iphone-app/' rel='bookmark' title='Permanent Link: Colando um Splash Screen no seu iPhone app'>Colando um Splash Screen no seu iPhone app</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/08/13/problema-com-iphone-os-3-0-1-no-provisioned-iphone-os-device-is-connected/' rel='bookmark' title='Permanent Link: Problema com iPhone OS 3.0.1 &#8211; No provisioned iPhone OS device is connected'>Problema com iPhone OS 3.0.1 &#8211; No provisioned iPhone OS device is connected</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/07/30/incluindo-um-icone-no-seu-aplicativo-para-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tratamento de Exceptions em Objective-C</title>
		<link>http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/</link>
		<comments>http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 12:54:28 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Exceptions]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=128</guid>
		<description><![CDATA[A linguagem Objective-C possui uma sintaxe para tratamento de exceptions parecido com Java e C++. As exceptions podem ser do tipo NSException, NSError ou podem ser classes customizadas que são subclasses de NSException. O suporte a exception é feito pelas diretivas de compilação: @try, @catch, @throw, e @finally. A seguir irei definir o signigicado de [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/' rel='bookmark' title='Permanent Link: Forwarding Objective-C Messages'>Forwarding Objective-C Messages</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A linguagem Objective-C possui uma sintaxe para tratamento de exceptions parecido com Java e C++. As exceptions podem ser do tipo NSException, NSError ou podem ser classes customizadas que são subclasses de NSException.</p>
<p>O suporte a exception é feito pelas diretivas de compilação:  @try, @catch, @throw, e @finally. A seguir irei definir o signigicado de cada diretiva.</p>
<p>@try: inicia um bloco de tratamento de exception, dentro dele deve estar todo código que pode ou deve lançar alguma exception.</p>
<p>@catch: contém o tratamento de uma determinada exception lançada pelo código contido no bloco @try.</p>
<p>@throw: sua finalidade é lançar uma exception.</p>
<p>@finally: todo código contido neste bloco será executado independente de uma exception ser lançada ou não dentro do bloco @try.</p>
<p>A sintaxe comum para declar um bloco @try..@catch..@finally é:</p>
<pre class="brush: cpp;">
@try {
	//codigo aqui
}
@catch( NSException *exception ) {
	//tratamento da exception aqui
}
@finally {
	//codigo sempre executado aqui
}
</pre>
<p>Agora vou criar um pequeno exemplo para demostrar o bloco funcionando.<br />
Irei criar uma instancia da classe NSObject e dentro do bloco @try irei invocar o método doNothing que não existe e com isso será lançada um NSException.</p>
<pre class="brush: cpp;">
NSLog( @&quot;Creating the instance of NSObject&quot; );
NSObject *object = [[NSObject alloc] init];

@try {
	NSLog( @&quot;try block&quot; );
	[object doNothing];
}
@catch( NSException *exception ) {
	NSLog( @&quot;catch block&quot; );
	NSLog(@&quot;main: Caught %@: %@&quot;, [exception name], [exception  reason]);
}
@finally {
	NSLog(@&quot;finally block&quot;);
}
</pre>
<p>O resultado desse exemplo é:</p>
<pre class="brush: plain;">
App3[1594:10b] Creating the instance of NSObject
App3[1594:10b] try block
App3[1594:10b] *** -[NSObject doNothing]: unrecognized selector sent to instance 0x105950
App3[1594:10b] catch block
App3[1594:10b] main: Caught NSInvalidArgumentException: *** -[NSObject doNothing]: unrecognized selector sent to instance 0x105950
App3[1594:10b] finally block
</pre>
<p>Podemos tratar diversas exception em um único bloco @try, utilizando vários blocos @catch um em seguida do outro. Lembrando que você deve tratar primeiro as exceptions mais específicas e depois as mais genéricas. Veja um exemplo abaixo:</p>
<pre class="brush: cpp;">
@try {
	//codigo aqui
}
@catch( MyCustomException *exception ) {
	//tratamento da exception aqui
}
@catch( NSException *exception ) {
	//tratamento da exception aqui
}
@finally {
	//codigo sempre executado aqui
}
</pre>
<p>Agora vou demonstrar o uso da diretiva @throw que serve para lançar uma nova exception, seu uso é bem simples bastando apenas informar a instancia da exception que será lançada.</p>
<pre class="brush: cpp;">
@try {
	NSLog( @&quot;try block&quot; );
	NSException *exception = [NSException exceptionWithName:@&quot;HotTeaException&quot; reason:@&quot;The tea is too hot&quot;  userInfo:nil];
	@throw exception;
}
@catch( NSException *exception ) {
	NSLog(@&quot;main: Caught %@: %@&quot;, [exception name], [exception  reason]);
}
</pre>
<p>No exemplo anterior repare que não utilizei a diretiva @finally apenas para demonstrar que seu uso não é obrigatorio. O resultado apresentado desse código é:</p>
<pre class="brush: plain;">
App3[1886:10b] try block
App3[1886:10b] main: Caught HotTeaException: The tea is too hot
</pre>
<p>Com isso já temos um bom conhecimento de como tratar exceptions em nosso código Objective-C.</p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/' rel='bookmark' title='Permanent Link: Forwarding Objective-C Messages'>Forwarding Objective-C Messages</a></li>
<li><a href='http://www.macdevelopers.com.br/2010/02/05/criando-jogos-em-2d-para-iphone-parte-1/' rel='bookmark' title='Permanent Link: Criando jogos em 2D para iPhone &#8211; Parte 1'>Criando jogos em 2D para iPhone &#8211; Parte 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trabalhando com Strings em Objective-C</title>
		<link>http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/</link>
		<comments>http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 12:56:48 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Classe]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[OS3.0]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=121</guid>
		<description><![CDATA[Diferente do C puro que para utilizarmos uma cadeia de caracteres temos que criar um array ( char[] ), em Object-C temos 2 classes que são utilizadas para representar Strings em código Objective-C, elas são: NSString e NSMutableString( subclasse de NSString ). Uma string imutável (NSString) é definida não sua criação e não pode mais [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/' rel='bookmark' title='Permanent Link: Definindo classes em Objective-C &#8211; Parte 1'>Definindo classes em Objective-C &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Diferente do C puro que para utilizarmos uma cadeia de caracteres temos que criar um array ( char[] ), em Object-C temos 2 classes que são utilizadas para representar Strings em código Objective-C, elas são:</p>
<p><strong>NSString e NSMutableString( subclasse de NSString ).</strong></p>
<p>Uma string imutável (NSString) é definida não sua criação e não pode mais ser alterada, enquanto uma string mutável (NSMutableString) pode ter seu conteúdo alterado após sua criação. Com base nessas informações, entendemos que devemos utilizar NSString quando uma string não precisar ser alterada depois de sua criação e caso contrário devemos utilizar a classe NSMutableString.</p>
<p>Podemos criar uma String de 2 formas, utilizando métodos das classes NSString e NSMutableString ou o construtor @.</p>
<pre class="brush: cpp;">
NSString *texto1 = @&quot;Minha String&quot;;
NSString *texto2 = [NSString stringWithUTF8String :&quot;Nova String&quot;];
</pre>
<p>Para comparar strings, você pode utilizar o operador == ou o metodo isEqualToString, utilizando o operador == a comparação é feita utilizando os ponteiros das variáveis e utilizando o método isEqualToString a comparação é feita utilizando o conteúdo das duas strings.</p>
<pre class="brush: cpp;">
NSString *texto1 = @&quot;Minha String&quot;;
NSMutableString *texto2 = [[NSMutableString alloc] initWithString:@&quot;Minha &quot;];
[texto2 appendString: @&quot;String&quot;];

[texto1 isEqualToString: texto2]; // retorna false
NSBool *resultado = (texto1 == texto2); //retorna true
</pre>
<p>A classe NSString fornece diversos métodos para ajudar o desenvolvedor, para conhece-los o ideal é ler a documentação da classe disponível na <a href="http://developer.apple.com/index.html">Apple Developer Connection</a>.</p>
<p>Vou incluir alguns exemplos abaixo para demostrar alguns recursos que a classe NSString fornece:</p>
<pre class="brush: cpp;">
NSString *texto1 = @&quot;Mac&quot;;
NSString *texto2 = [texto1 stringByAppendingString:@&quot; Developers&quot;];
// texto2 tera o valor @&quot;Mac Developers&quot;
</pre>
<p>No exemplo acima criei uma instância de NSString chamada texto1 e depois criei outra instância chamada texto2 utilizando o valor da variavel texto1 e adicionando outro valor no final.</p>
<pre class="brush: cpp;">
NSString *numeros = @&quot;0123456789&quot;;
NSString *parte = [numeros substringToIndex:4];
// parte é igual a @&quot;0123&quot;
</pre>
<p>No exemplo acima criei uma instância de NSString chamada numeros com o valor &#8220;0123456789&#8243; e depois criei uma segunda instância de NSString chamada parte onde seu valor sera os 4 primeiros caracteres da variavel numeros.</p>
<p>Com isso já sabemos o básico de como utilizar as classes NSString e NSMutableString em Objective-C.</p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/' rel='bookmark' title='Permanent Link: Definindo classes em Objective-C &#8211; Parte 1'>Definindo classes em Objective-C &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Definindo classes em Objective-C &#8211; Parte 1</title>
		<link>http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/</link>
		<comments>http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 19:17:36 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Classe]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=42</guid>
		<description><![CDATA[Assim como outras linguagens de programação, a linguagem Objective-C também suporta o o desenvolvimento utilizando orientação a objetos. Em Objective-C, as classes são definidas em duas partes: Uma interface que declara os métodos, variáveis de instância da classe e sua superclasse. Uma implementação que realmente define a classe (contém o código que implementa os seus [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Assim como outras linguagens de programação, a linguagem Objective-C também suporta o o desenvolvimento utilizando orientação a objetos. Em Objective-C, as classes são definidas em duas partes:</p>
<ul>
<li>Uma interface que declara os métodos, variáveis de instância da classe e sua superclasse.</li>
<li>Uma implementação que realmente define a classe (contém o código que implementa os seus métodos).</li>
</ul>
<p>Essas duas partes são geralmente divididas em dois arquivos, no entanto, uma definição de classe pode abranger vários arquivos através da utilização de um recurso chamado de &#8220;category&#8221; (Category serve para que uma classe já implementada possa receber novos métodos, algo parecido com subclasses).</p>
<p><strong>Arquivos</strong></p>
<p>Mesmo que o compilador não exija, a interface e a implementação são normalmente separados em dois arquivos diferentes. Um único arquivo pode declarar ou implementar mais de uma classe. No entanto, é recomendado um arquivo distinto para cada interface e outro para cada implementação.</p>
<p>Os arquivos de interface e implementação normalmente possuem o mesmo nome da classe. O nome do arquivo de implementação tem a extensão .m indicando que ele é um código fonte Objective-C. O arquivo da interface pode ser atribuído para qualquer outra extensão, contudo, geralmente utiliza-se a extensão .h (Indicando um Header ou Cabeçalho).</p>
<p>Por exemplo, a classe Person seria declarada no arquivo Person.h (Interface) e definida no Person.m (Implementation).</p>
<p><strong>Interface</strong></p>
<p>A declaração de uma interface inicia-se com a diretiva de compilação @interface e termina com a diretiva @end. (Todas as directivas de compilação em Objective-C começam com &#8220;@&#8221;). A seguir uma demonstração de como uma interface deve ser:</p>
<pre class="brush: cpp;">
@interface ClassName : ItsSuperclass
{
instance variable declarations
}

method declarations

@end
</pre>
<p>A primeira linha da declaração apresenta o nome da classe e a identificação de sua superclasse. Se uma classe nao informar uma superclasse então sera implicitamente utilizado a classe NSObject como superclasse.</p>
<p>Após a primeira linha de código da classe, um conjunto de chaves envolvem a declaração de variáveis da classe e em seguida vem a declaração de metodos que irão compor a classe. Os métodos podem ser definidos como métodos de classe e métodos de instancia. Métodos de classe são métodos que podem ser executam sem a necessidade de uma instância da classe, este tipo de método é definido pelo sinal &#8216;+&#8217;. Um exemplo de método de classe seria:</p>
<pre class="brush: cpp;">
+ doSomething;
</pre>
<p>Métodos de instancia, são metodos executados através das instancias de classes, este tipo de método é definido pelo sinal &#8216;-&#8217; e um exemplo de método de instancia seria:</p>
<pre class="brush: cpp;">
- (void) doSomething;
</pre>
<p><strong>Regras para Interface</strong></p>
<p>A finalidade do arquivo de interface é declarar a nova classe para outros arquivos fonte (e para outros programadores). Ela contém todas as informações que eles precisam para trabalhar com a classe (programadores poderão também apreciar um pouco de documentação).</p>
<p>A interface informa aos usuários como a classe está ligada na hierarquia de herança e o que ela herda.</p>
<p>A interface também permite que o compilador saiba que variáveis de instancia ela contém, diz também que variáveis foram herdadas. Apesar do exemplo de variáveis serem naturalmente mais vistos como uma questão da aplicação de uma classe e não na sua interface, eles devem ser declarados no arquivo de interface. Isto acontece porque o compilador precisa saber a estrutura de um objeto quando ele é utilizado, não apenas onde ele encontra-se definido.</p>
<p>Através de sua lista de método declarados, a interface permite que outros módulos saibam que mensagens podem ser enviadas para uma classe e instâncias da classe. Qualquer método que pode ser utilizado fora da definição da classe deve ser declarado na interface, métodos internos da classe de implementação podem ser omitidos.</p>
<p>Na próxima parte do artigo irei falar um pouco mais sobre declaração de variáveis de instância e de métodos, assim como do arquivo de implementação.</p>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/' rel='bookmark' title='Permanent Link: Começando em Objective-C'>Começando em Objective-C</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/23/tratamento-de-exceptions-em-objective-c/' rel='bookmark' title='Permanent Link: Tratamento de Exceptions em Objective-C'>Tratamento de Exceptions em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Começando em Objective-C</title>
		<link>http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/</link>
		<comments>http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 03:22:35 +0000</pubDate>
		<dc:creator>Rodrigo Lazoti</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://www.macdevelopers.com.br/?p=28</guid>
		<description><![CDATA[Nesse post irei colocar um dos exemplos que fiz quando comecei a estudar a linguage Objective-C, procurei comentá-lo bastante (em inglês ) para facililar o entendimento do código. Basicamente criei uma classe Pessoa com duas variaveis de instancia (nome e data de nascimento), um metodo estático (class method) e três métodos de classe. Criei uma [...]


Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/' rel='bookmark' title='Permanent Link: Forwarding Objective-C Messages'>Forwarding Objective-C Messages</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/' rel='bookmark' title='Permanent Link: Definindo classes em Objective-C &#8211; Parte 1'>Definindo classes em Objective-C &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Nesse post irei colocar um dos exemplos que fiz quando comecei a estudar a linguage Objective-C, procurei comentá-lo bastante (em inglês <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) para facililar o entendimento do código.</p>
<p>Basicamente criei uma classe Pessoa com duas variaveis de instancia (nome e data de nascimento), um metodo estático (class method) e três métodos de classe. Criei uma representação UML utilizando tipos do Java para representar a classe, pois não achei como utilizar os tipos do ObjC no argoUML. <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><img class="alignnone size-full wp-image-181" title="class diagram people" src="http://www.rodrigolazoti.com.br/wp-content/uploads/2009/04/classdiagrampeople.gif" alt="class diagram people" width="159" height="149" /></p>
<p>Não vou ficar explicando para que serve exatamente cada parte do código para nao alongar muito o post e para ter assuntos para outros posts também! <img src='http://www.macdevelopers.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Todo o codigo pode ser colocado em um único arquivo (algumNome.m) ou em arquivos separados @Interface ( algumNome.h) @Implementation e metodo main (algumNome.m).</p>
<p>Com este pequeno exemplo já pode-se entender de uma forma simples como trabalhar com classes e suas instancias, Strings, Datas e algumas definições OO em Objective-C.</p>
<p>Finalmente vamos ver o exemplo, vou começar pela @Interface (É diferente de uma interface Java) que especifica o que a classe People irá conter:</p>
<pre class="brush: cpp;">
#import

//Interface of the class People
@interface People : NSObject
{
//defining the instance variables as private
@private
NSString *name;
NSDate *birthDate;
}

//static method or class method
+ (void) doSomething;

//instance method
- (void) sayMyName;
- (void) sayMyAge;
- (int) calculateMyAge;

//properties (getters and setters)
@property (readwrite, copy) NSString *name;
@property (copy, readwrite) NSDate *birthDate;

@end
</pre>
<p>Agora vou mostrar como ficou a implementação da classe People (antes que alguém reclame o calculo da idade so esta sendo feito ate o nivel Mês, ou seja, nao esta utilizando o dia do aniversario, apenas ano e mes para calcular a idade):</p>
<pre class="brush: csharp;">
//Implementation of the class People
@implementation People

/*
tell the compiler that it should synthesize
the setter and/or getter methods for the property
*/
@synthesize name;
@synthesize birthDate;

//implementation of the method class
+ (void) doSomething {
printf(&quot;Do something!\n&quot;);
}

//implementation  of the instance method class
- (void) sayMyName {
printf(&quot;Hi, my name is %s\n&quot;, [name UTF8String] );
}

//implementation of the instance method class
- (void) sayMyAge {
NSString *myBirthDay = [birthDate descriptionWithCalendarFormat:@&quot;%d/%m/%Y&quot; timeZone:nil locale:nil];
printf(&quot;Hi, my birth day is %s &quot;, [myBirthDay UTF8String]);
printf(&quot;and i have %i years&quot;, [self calculateMyAge]);
}

//implementation of the instance method class
- (int) calculateMyAge {
NSDate *currentDate = [NSDate date];
int birthYear = [[birthDate descriptionWithCalendarFormat:@&quot;%Y&quot; timeZone:nil locale: nil] intValue];
int birthMonth = [[birthDate descriptionWithCalendarFormat:@&quot;%m&quot; timeZone:nil locale:nil] intValue];
int currentYear = [[currentDate descriptionWithCalendarFormat:@&quot;%Y&quot; timeZone:nil locale:nil] intValue];
int currentMonth = [[currentDate descriptionWithCalendarFormat:@&quot;%m&quot; timeZone:nil locale:nil] intValue];
int age = currentYear - birthYear;
if (currentMonth &lt;= birthMonth) {
age--;
}
return age;
}

@end
</pre>
<p>Pronto, já temos a classe pronta! Agora vou testá-la:</p>
<pre class="brush: csharp;">
int main (int argc, const char * argv[]) {
//call class method
[People doSomething];

//create a instance of People
People *rodrigo = [[ People alloc] init];

//set the name
[rodrigo setName: @&quot;Rodrigo Lazoti&quot;];

//set the day of birth. Format: month/day/year
[rodrigo setBirthDate: [NSDate dateWithNaturalLanguageString:@&quot;08/08/1981&quot;]];

//call instance method
[rodrigo sayMyName];

//call instance method
[rodrigo sayMyAge];

//end program
return 0;
}
</pre>
<p>O resultado do código executado será:</p>
<pre class="brush: plain;">

Do something!

Hi, my name is Rodrigo Lazoti.

Hi, my birth day is 08/08/1981
and i have 27 years
</pre>


<p>Posts relacionados:<ol><li><a href='http://www.macdevelopers.com.br/2009/12/09/forwarding-objective-c-messages/' rel='bookmark' title='Permanent Link: Forwarding Objective-C Messages'>Forwarding Objective-C Messages</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/06/28/definindo-classes-em-objective-c-parte-1/' rel='bookmark' title='Permanent Link: Definindo classes em Objective-C &#8211; Parte 1'>Definindo classes em Objective-C &#8211; Parte 1</a></li>
<li><a href='http://www.macdevelopers.com.br/2009/07/16/trabalhando-com-strings-em-objective-c/' rel='bookmark' title='Permanent Link: Trabalhando com Strings em Objective-C'>Trabalhando com Strings em Objective-C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.macdevelopers.com.br/2009/06/24/comecando-em-objective-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
