Blog

How to use Targets in Xcode

Posted by on 2:50 pm in Knowledge Base | Comments Off on How to use Targets in Xcode

Targets are an extremely yet totally undocumented feature of Xcode. They allow you to write code once, and then build multiple “versions” of the same code base. This makes maintenance and code updates extremely easy across more than “product”. I use those quotation marks because usually an “Xcode Project” equals a “Product” (such as one iPhone app, or one Mac app). But really it’s the Target that defines the product, and it is feasible to write code once and use it to create several...

read more

How to define Preprocessor Macros in Xcode

Posted by on 2:13 pm in Knowledge Base | Comments Off on How to define Preprocessor Macros in Xcode

I’ve often wondered how to use those efficiently, and I’ve just found out how to do it. As always, they’re not difficult to implement – but not documented in a way that simple folk like me can understand it. Be that as it may… Preprocessor Macros can be useful if you’d like to compile two different versions of the same Xcode Project, such as a Lite and a Pro version, or a separate iPhone and an iPad version. Rather than create separate Xcode Projects for each version, you have one project with two targets....

read more

How to check if your app is running on an iPad or an iPhone

Posted by on 2:14 am in Knowledge Base | Comments Off on How to check if your app is running on an iPad or an iPhone

Here’s how we check that: // if we're an iPad if ([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPad) { // do some iPad or iPad Mini specific stuff } else { // we're on iPhone or iPod Touch } Alternatively you can check the same method for UIUserInterfaceIdiomPhone instead, which is returned when you’re on an iPhone or iPod touch.

read more

How to hide navigation elements with swishy animations

Posted by on 1:46 am in Knowledge Base | Comments Off on How to hide navigation elements with swishy animations

You can hide (and show) navigation bars and toolbars from your UINavigationController with extremely funky animations, much like we see in the Photos app on iOS. In the app, when you single-tap the screen, both top and bottom toolbars disappear. Here’s how we do that: Provided you have your view controller embedded in a UINavigationController, you can call the following methods to slide the top and bottom bars in and out: // hide both bars [self.navigationController setNavigationBarHidden:YES animated:YES]; [self.navigationController...

read more

Managed Object Context arrives empty when passed via a segue in iOS 5

Posted by on 9:05 pm in Knowledge Base | Comments Off on Managed Object Context arrives empty when passed via a segue in iOS 5

I’ve just found that passing an NSManagedObjectContext object via a segue in iOS 5 doesn’t work: the property remains empty. In iOS 6 on the other hand this isn’t a problem: the context arrives just like any other property would, and as logic would dictate. Here’s code from an amended Utility Template app: – (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showAlternate"]) { // also onpass the managed object context...

read more

How to find out what class an NSObject belongs to

Posted by on 12:32 pm in Knowledge Base | Comments Off on How to find out what class an NSObject belongs to

Sometimes you find yourself having a reference to an object (say a View Controller), but you don’t know what class it belongs to. Thankfully there’s a method for this which will work with any NSObject: if ([self.navController isMemberOfClass:[UIViewController class]]) { self.previousTitle = @"Novels"; } In this example we’re testing if our self.navController is a UIViewController. The method returns a BOOL. If you inherit from other classes and test for a parent class, rest assured that this does not return false...

read more

How to define a method that takes multiple parameters

Posted by on 6:25 pm in Knowledge Base | Comments Off on How to define a method that takes multiple parameters

I keep forgetting how to do this… don’t ask me why, it’s not that difficult! So here’s how we define one: – (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo; Add more parameters as you please. In theory, the method name is split across these multiple descriptive parts before each parameter is defined. However in reality I find it easier to just repeat the parameter names in each section, like this: – (void)methodName:(NSString *)theString nextString:(NSString...

read more

How to list the contents of an NSURL

Posted by on 2:28 am in Knowledge Base | Comments Off on How to list the contents of an NSURL

On the iOS simulator we have the luxury of peeking inside our virtual devices with the Finder. We can do this by heading over to the Finder, holding down Option and clicking Go. This will bring up the Library, in which you can navigate to Application Support / iPhone Simulator / 7.0 / Applications / followed by a weird string. One of those will contain your app and all its directories. But on a real device we’re not so lucky. Has a file really been copied the way we intended it to? NSFileManager to the rescue! Here’s how to read...

read more

How to display a UIImage from an NSURL

Posted by on 10:10 pm in Knowledge Base | Comments Off on How to display a UIImage from an NSURL

If you’re displaying images from the main iOS bundle, things are fairly straightforward: self.imageView.image = [UIImage imageNamed:@"Amy.png"]; But if you have an NSURL to your image then it’s not as easy. It took me some digging to find out that you have to convert the URL into NSData first, and then display the data: NSData *imageData = [NSData dataWithContentsOfURL:destinationURL]; self.imageView.image = [UIImage imageWithData:imageData]; Convoluted – but currently the only way I know how to do...

read more

How to copy a file from the Main Bundle into the Documents Directory in iOS

Posted by on 9:43 pm in Knowledge Base | Comments Off on How to copy a file from the Main Bundle into the Documents Directory in iOS

You can do this either by using paths or NSURLs. Apple recommends using NSURLs, so here’s how it works. In this example we’re copying a file called “Amy.png” which exists in the app’s main bundle. // file URL in our bundle NSURL *fileFromBundle = [[NSBundle mainBundle]URLForResource:@"Amy" withExtension:@"png"]; // Destination URL NSURL *destinationURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"Amy.png"]; // copy it over [[NSFileManager...

read more