<?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>boxedfolder.com - Flex, Flash, PHP, Cocoa Touch &#38; Web &#187; iPhone &amp; mobile</title>
	<atom:link href="http://www.boxedfolder.com/blog/category/mobile/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.boxedfolder.com</link>
	<description></description>
	<lastBuildDate>Tue, 03 Aug 2010 14:16:06 +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>Deep-Copy mit NSKeyedArchiver</title>
		<link>http://www.boxedfolder.com/blog/2010/08/03/deep-copy-mit-nskeyedarchiver/</link>
		<comments>http://www.boxedfolder.com/blog/2010/08/03/deep-copy-mit-nskeyedarchiver/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 14:13:22 +0000</pubDate>
		<dc:creator>Heiko</dc:creator>
				<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[iPhone & mobile]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[copying]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[nskeyedarchiver]]></category>

		<guid isPermaLink="false">http://www.boxedfolder.com/?p=685</guid>
		<description><![CDATA[Eine flache Kopie eines Objekts (Shallow-Copy) in Cocoa herzustellen ist im Prinzip ganz einfach. Eine tiefe Kopie (Deep-Copy) erfordert etwas mehr Beachtung.]]></description>
			<content:encoded><![CDATA[<p>Eine flache Kopie eines Objekts (Shallow-Copy) in <strong>Cocoa</strong> herzustellen ist im Prinzip ganz einfach. Man implementiert das <em>NSCopying</em>-Protokoll welches die Methode -<em>copyWithZone: </em>erfordert. In der Implementierung von <em>copyWithZone:</em> kann man ganz einfach die Referenzen innerhalb des Objekts passend der neuen Instanz zuordnen und <strong>C-Types</strong> eventuell kopieren. Die Methode -<em>copy, </em>welche <em>NSObject</em> implementiert führt nun einen Aufruf von -<em>copyWithZone: </em>durch (mit <em>nil</em> als Argument).</p>
<p><span id="more-685"></span></p>
<p>Tiefe Kopien (Deep-Copies) erfordern hingegen etwas mehr als das Zuordnen einzelner Referenzen. Prinzipiell muss durch alle Properties der Instanz traversiert werden und jedes Unterobjekt und dessen Unterobjekte dementsprechend auch kopiert werden. Eine einfache Methode dieses zu erreichen kann in Cocoa über den Weg der <strong>Archivierung</strong> mit Hilfe des <em>NSKeyedArchiver </em>gehen<em> </em>(siehe auch meinen vorherigen <a title="Artikel über NSKeyedArchiver" href="http://www.boxedfolder.com/blog/2010/07/26/daten-permanent-abspeichern-mit-nskeyedarchiver/">Artikel</a>). Eine konkrete Implementierung innerhalb einer Klasse könnte so aussehen:</p>
<pre><code>@interface Entry : NSObject &lt;NSCoding&gt;
{
        NSString *text;
	NSString *headline;
}

@property (nonatomic, retain)NSString *text;
@property (nonatomic, retain)NSString *headline;

<strong style="border:none;">-(id)deepCopy;</strong>

@end

///////////////////////////////////////////////////////////////////////////////////////////////////

@implementation Entry

@synthesize text, headline;

-(id)initWithCoder: (NSCoder *)coder
{
	if(self = [super init])
	{
		self.text = [coder decodeObjectForKey: @"text"];
		self.headline = [coder decodeObjectForKey: @"headline"];
	}

	return self;
}

-(void)encodeWithCoder: (NSCoder *)encoder
{
    [encoder encodeObject: self.text forKey: @"text"];
    [encoder encodeObject: self.headline forKey: @"headline"];
}

<strong style="border:none;">-(id)deepCopy
{
    return [NSKeyedUnarchiver unarchiveObjectWithData: [NSKeyedArchiver archivedDataWithRootObject: self]];
}</strong>

-(void)dealloc
{
    [text release];
    [headline release];
    [super dealloc];
}

@end</code></pre>
<p>Zu beachten ist natürlich dass jedes Objekt und alle Unterobjekte dem <em>NSCoding-</em>Protokoll folgen müssen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boxedfolder.com/blog/2010/08/03/deep-copy-mit-nskeyedarchiver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Daten permanent abspeichern mit NSKeyedArchiver</title>
		<link>http://www.boxedfolder.com/blog/2010/07/26/daten-permanent-abspeichern-mit-nskeyedarchiver/</link>
		<comments>http://www.boxedfolder.com/blog/2010/07/26/daten-permanent-abspeichern-mit-nskeyedarchiver/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 17:08:57 +0000</pubDate>
		<dc:creator>Heiko</dc:creator>
				<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[iPhone & mobile]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[nskeyedarchiver]]></category>

		<guid isPermaLink="false">http://www.boxedfolder.com/?p=667</guid>
		<description><![CDATA[Falls man auf die Skalierbarkeit und Flexibilität einer SQLite-Datenbank verzichten kann, gibt es eine schnelle und coole Methode Object-Trees permanent in den Speicher zu schreiben .]]></description>
			<content:encoded><![CDATA[<p>Falls man auf die Skalierbarkeit und Flexibilität einer <strong>SQLite-</strong>Datenbank verzichten kann, gibt es eine schnelle und coole Methode Object-Trees permanent in den Speicher zu schreiben bzw. wieder zu laden. Mit Hilfe des <em>NSCoding</em>-Protokolls und der Klasse <em>NSKeyedArchiver</em> und <em>NSKeyedUnarchiver</em> lassen sich Daten schnell und sauber abspeichern. Objekte werden hierbei zuerst in ein Binärformat kodiert und dann in eine Datei geschrieben. Jedes zu archivierende Objekt muss zwangsläufig das <em>NSCoding</em>-Protokoll einhalten und somit die beiden Methoden<em> initWithCoder: </em>und<em> encodeWithCoder: </em>implementieren. Nachfolgend habe ich ein kleines Beispiel erstellt wie einfach dieser Prozess ist. Eine Beispielklasse <em>Entry</em> könnte so aussehen:</p>
<p><span id="more-667"></span></p>
<pre><code>@interface Entry : NSObject &lt;NSCoding&gt;
{
        NSString *text;
	NSString *headline;
}

@property (nonatomic, retain)NSString *text;
@property (nonatomic, retain)NSString *headline;

@end

///////////////////////////////////////////////////////////////////////////////////////////////////

@implementation Entry

@synthesize text, headline;

-(id)initWithCoder: (NSCoder *)coder
{
	if(self = [super init])
	{
		self.text = [coder decodeObjectForKey: @"text"];
		self.headline = [coder decodeObjectForKey: @"headline"];
	}

	return self;
}

-(void)encodeWithCoder: (NSCoder *)encoder
{
    [encoder encodeObject: self.text forKey: @"text"];
    [encoder encodeObject: self.headline forKey: @"headline"];
}

-(void)dealloc
{
    [text release];
    [headline release];
    [super dealloc];
}

@end
</code></pre>
<p>Eine Klasse die nun mehrere Entries <strong>archivieren</strong> und wieder <strong>extrahieren</strong> möchte, könnte das mit folgenden Methoden tun:</p>
<pre><code>[...]
-(void)archiveEntries: (NSArray *)entries withPath: (NSString *)path
{
        NSMutableDictionary *rootObject = [NSDictionary dictionaryWithObject: entries forKey: @"entries"];
	[NSKeyedArchiver archiveRootObject: rootObject toFile: path];
}

-(NSArray *)unarchiveEntriesOnPath: (NSString *)path
{
        NSDictionary *rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: path];
        return [rootObject valueForKey: @"entries"];
}
[...]</code></pre>
<p>Die Daten werden in unserem Beispiel in eine plist-Datei gespeichert, dessen Pfad natürlich frei gewählt werden kann. Natürlich hat man die Möglichkeit die Daten auch mit <em>NSData</em> zu schreiben. Ich empfehle einfach mal die Apple Dokumentation zum Thema <em>NSKeyedArchiver</em> durchzugehen.</p>
<p>Link zur <a class="blank" title="NSKeyedArchiver" href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html">Apple Dokumentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boxedfolder.com/blog/2010/07/26/daten-permanent-abspeichern-mit-nskeyedarchiver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIModalPresentationStyle und UIModalTransitionStyle</title>
		<link>http://www.boxedfolder.com/blog/2010/05/13/uimodalpresentationstyle-und-uimodaltransitionstyle/</link>
		<comments>http://www.boxedfolder.com/blog/2010/05/13/uimodalpresentationstyle-und-uimodaltransitionstyle/#comments</comments>
		<pubDate>Thu, 13 May 2010 18:30:53 +0000</pubDate>
		<dc:creator>Heiko</dc:creator>
				<category><![CDATA[applications]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[iPhone & mobile]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[modal]]></category>
		<category><![CDATA[sdk 3.2]]></category>
		<category><![CDATA[transitions]]></category>

		<guid isPermaLink="false">http://www.boxedfolder.com/?p=640</guid>
		<description><![CDATA[Seit einiger Zeit ist das SDK 3.2 für iPad schon verfügbar und alle Welt Entwickelt bereits fleißig auf der neuen Plattform.]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit ist das <strong>SDK 3.2</strong> für iPad schon verfügbar und alle Welt entwickelt bereits fleißig auf der neuen Plattform. Ich persönlich schreibe gerade ein Update für <a href="http://listiee.boxedfolder.com">listiee</a> welches in Form einer Universal Binary  kommt und ein speziell an das <strong>iPad</strong> angepasstes UI mitbringen wird. Das neue SDK bringt ein paar coole neue Features mit, von denen mich der neue &#8220;Presentation Style&#8221; der modalen Ansichten besonders begeistert. Apple hat hier eine gute Arbeit geleistet und erkannt dass die Art modale Informationen abzufragen auf dem iPad wesentlich eleganter lösbar ist. Mit den beiden Properties <em>modalPresentationStyle</em> und <em>modalTransitionStyle</em> im <em>UIViewController</em> ermöglicht das SDK 3.2 das festlegen der Übergänge und Größen der neuen modalen Ansichten.</p>
<p><span id="more-640"></span></p>
<p>Die Property <em>modalPresentationStyle</em> legt fest in welcher Größe der neue ViewController seine Ansicht darstellt. Die Enum <em>UIModalPresentationStyle</em> hat vier unterschiedliche Werte:</p>
<ul>
<li><code>UIModalPresentationFullScreen</code> &#8211; Es wird in einer Vollbildansicht präsentiert.</li>
<li><code>UIModalPresentationPageSheet</code> &#8211; Legt die Größe auf die der Portraitansicht fest.</li>
<li><code>UIModalPresentationFormSheet</code> &#8211; Die neue Ansicht wird in einem Fenster angezeigt.</li>
<li><code>UIModalPresentationCurrentContext</code> &#8211; Nutzt den Style des Parents.</li>
</ul>
<p>Man ist somit nicht immer auf die Vollbildansicht angewiesen. Das ist recht praktisch wenn man mal eben ein modales Fenster einblenden will um z.B. einen neuen Datensatz mit wenigen Feldern zu erstellen.</p>
<p>Darüber hinaus kann man die modalen Ansichten neuerdings auch mit Hilfe verschiedener Animationen einblenden. Bekannt ist der Weg die Ansicht von unten nach oben einfahren zu lassen. Das Ganze ist mit dem <em>UIModalTransitionStyleCoverVertical</em> der standard Übergang. Dazu hat Apple den horizontalen Flip (<em>UIModalTransitionStyleFlipHorizontal</em>), den Crossfade (<em>UIModalTransitionStyleCrossDissolve</em>) und den sogennanten &#8220;Partial Curl&#8221; (<em>UIModalTransitionStylePartialCurl</em>), sprich das Umblättern, ins Framework übernommen.</p>
<p>Beide Neuerungen sind in einem ViewController gewohnt leicht einzubinden:</p>
<pre><code>MyViewController *viewController = [[MyViewController alloc] init];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController: viewController animated: YES];</code></pre>
<p>Link zu dem <a class="blank" href="http://developer.apple.com/iphone/library/releasenotes/General/WhatsNewIniPhoneOS/Articles/iPhoneOS3_2.html#//apple_ref/doc/uid/TP40009337-SW1">offiziellen SDK 3.2 Changelog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boxedfolder.com/blog/2010/05/13/uimodalpresentationstyle-und-uimodaltransitionstyle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Flash-Plattform &amp; das iPhone</title>
		<link>http://www.boxedfolder.com/blog/2010/01/06/die-flash-plattform-das-iphone/</link>
		<comments>http://www.boxedfolder.com/blog/2010/01/06/die-flash-plattform-das-iphone/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 16:22:19 +0000</pubDate>
		<dc:creator>Heiko</dc:creator>
				<category><![CDATA[flash & flex]]></category>
		<category><![CDATA[iPhone & mobile]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.boxedfolder.com/?p=597</guid>
		<description><![CDATA[Ich wollte das neue Jahr gleich mal dazu nutzen einen kleinen Beitrag über das iPhone, Flash und meine Einschätzung zur ganzen Sache zu schreiben. ]]></description>
			<content:encoded><![CDATA[<p>Ich wollte das neue Jahr gleich mal dazu nutzen einen kleinen Beitrag über das iPhone, Flash und meine Einschätzung zur ganzen Sache zu schreiben. Wie wir alle wissen sollte es Ende des Jahres eine (public) Beta von Flash CS5 geben, welche den Export-To-iPhone erlaubt. Diese Beta ist nun abgeblasen worden. Das ganze hat für vielerlei Aufregung gesorgt, weil natürlich ein Haufen Leute unheimlich gierig sind in den Mobilen-Markt (das iPhone in diesem Fall) zu drängen.</p>
<p>Ich schätze die gesamte Lage etwas verhaltener ein. Zum einen erkenne  ich noch nicht wie sich <strong>Flash CS5</strong> dazu eignet wirkliche Anwendungen mit mobilem Interface zu dispatchen. Hier fehlt es schlichtweg an passenden (nativen) Komponenten. Zum anderen bin ich mir unsicher ob Performance und Qualität solcher Anwendungen für den erwarteten Erfolg ausreichen. Bisher hörte ich nur, dass aus CS5 veröffentlichte iPhone Apps verhältnismäßig größer sind als die native Konkurrenz.</p>
<p>Persönlich bin ich vielmehr gespannt auf das mobile <strong>Flex-Framework</strong> mit dem <strong>Codenamen  &#8220;Slider&#8221;</strong>. Dieses soll das dispatchen einer Anwendung auf die gängigen mobilen Plattformen erlauben. Es bietet neben einer leichtgewichtigen Struktur auch UI-Komponenten die für die mobile Plattform entwickelt werden. Das ganze soll, so wird gemunkelt, im Laufe des Jahres benutzbar sein.</p>
<p>Ich möchte an dieser Stelle auch noch auf einen <a class="blank" title="Video-Flash" href="http://www.video-flash.de/index/iphone-frameworks-sdk-web-entwickler/">Artikel</a> von Florian Plag aufmerksam machen. Dieser listet die teilweise bereits erhältlichen Flash und nicht-Flash Alternativen zur iPhone-Entwicklung auf. Ich würde allerdings jedem ans Herz legen sich eventuell ein gutes <strong>Objective-C</strong> Buch zu schnappen, bevor man sich auf Scriptsprachen wie z.B. <strong>Lua</strong> fixiert. Was ich bisher gesehen habe, kann Objektive-C in vielen Bereichen eine durchaus elegante Sprache sein.</p>
<p>Link zu <a class="blank" title="Flex Slider" href="http://labs.adobe.com/technologies/flex/mobile/">Flex-&#8221;Slider&#8221;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boxedfolder.com/blog/2010/01/06/die-flash-plattform-das-iphone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
