Don’t use setAlternateColor: on UISwitch

March 3, 2011 § 1 Comment

According to Apple documentation, it is recommended not to change UISwitch.

By default UISwitch shows a blue button with “ON” label and white button with “OFF” label. API won’t allow you to change the font name, font size, font style, font color, button color on UISwitch.

Even though there are many examples on how to use setAlternateColor: method to change the default UISwitch button from blue color to orange color, this is not recommended. Your app will be rejected if you use it.

The UISwitch class is not customizable.

You would have to build your own custom switch. It is in general difficult to subclass UIControl and reimplement UISwitch. There are other work around approaches to recreate Switch using png images.

Disable & Enable Idle Timer in iOS SDK

March 2, 2011 § 2 Comments

By default, the idle timer will dim the screen after a period of non use and then turn the power to the screen off. You may need to disable idle timer on a specific app such as a Flash light app or location-based app.

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

}

Add the following line:
[application setIdleTimerDisabled:YES];

– (void)applicationWillTerminate:(UIApplication *)application {

}

Add the following line to re-enable the idle timer:
[application setIdleTimerDisabled:NO];

This won’t work on the Simulator but it definitely works on device.

Debugging using printf() in Xcode Console

March 2, 2011 § 2 Comments

You can use printf() function inside .m file to indicate the app status such as application starts and ends.

In Xcode, select AppDelegate.m file, insert a line inside applicationDidFinishLaunching: method:

– (void)applicationDidFinishLaunching:(UIApplication *)application {
ā€¦
}

Add the following:
printf(ā€œ%s\nā€, __FUNCTION__);

Note: The __Function__ has two underscores before and after the FUNCTION.

Add the same line to applicationWillTerminate: method

– (void)applicationWillTerminate:(UIApplication *)application {

}

You should be able to see the printed output inside Xcode Console when you launch the app

[AppDelegate applicationDidFinishLaunching:]

After you exit the app by pressing the Home button on the iPhone simulator, you will see this printed output
[AppDelegate applicationWillTerminate:]

UIDevice Properties

March 2, 2011 § Leave a comment

Currently these are the most popular common UIDevice properties. It shows the device name, device identifier, device model, device system name, and device system version.

You can print these properties inside the Console for debugging.

NSLog(@”Device Name: %@”, [UIDevice currentDevice].name);
NSLog(@”UDID: %@”, [UIDevice currentDevice].uniqueIdentifier);
NSLog(@”Device Model: %@”, [UIDevice currentDevice].model);
NSLog(@”System Name: %@”, [UIDevice currentDevice].systemName);
NSLog(@”System Version: %@”, [UIDevice currentDevice].systemVersion);
NSLog(@”User Interface: %@”, [UIDevice currentDevice].userInterfaceIdiom);

If you would like to print it in a label, then you can assign an NSInteger object to the UIDevice property. Assign the UILabel text to the NSString object.

// Show Device Name
NSString *nameString = [UIDevice currentDevice].name;
nameLabel.text = nameString;

You can also print Core Foundation object in Console.

CFShow([[UIDevice currentDevice] model]);
printf(“–\n”);

Constant in Objective-C

March 2, 2011 § Leave a comment

This is a very tricky task to handle constants in Objective-C. The most suggested approach is to define global, public or private constants. This will work only if you don’t expect to put the same constant inside a loop.

In the header file

// Constants.h
extern NSString * const strConstant;

You can include this file in each file that uses the constants or in the pre-compiled header for the project.

// Constants.m
NSString * const
strConstant
= @"Constant";

Constants.m should be added to your application/framework’s target to link it to product.

It is suggested that the advantage of using string constants instead of #define‘d constants is that you can test for equality using pointer comparison (stringInstance == strConstant) which is much faster than string comparison ([stringInstance isEqualToString:strConstant]).

// Constants.h
#define MY_CONSTANT @"my_constant"

Or even better
// Constants.h
extern NSString * const MY_CONSTANT;
// Constants.m
NSString * const MY_CONSTANT = @"my_constant";

If you need a non global constant, you should use static keyword. Static constant is not visible outside the file.

// Constants.m
static NSString * const CONSTANT = @"my_constant";

Another quick dirty way of declaring global constants is to put constant declaration into pch file instead of .h or .m files.

To declare integer instead of string in Objective-C, you will use NSInteger. This is Apple preferred way of declaring Objective-C integer.

NSInteger const counter = 0;

However if you are going to use this method to declare NSInteger and use it inside a loop, then you are in trouble.

Warning:

Assignment of read-only variable ‘counter’

If you need to use a constant inside a IF statement and iterate the constant inside a class instance or method, you would have to use static keyword.

You can add static int outside @implement.

static int counter = 0;

– (void)showTimer {
counter += 1;
}

Where Am I?

You are currently viewing the archives for March, 2011 at Web Builders.