NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; NSLog(@"%@", languages);
NSMutableArray count always returns zero
The code is as follows, rowsToUpdate is NSMutableArray *, [sites count] is greater than 0, and there is value for row index, but [rowsToUpdate count] always returns 0:
for (int i=0; i<[sites count]; i++) { NSLog(@"row index: %i, %@", i, [NSString stringWithFormat:@"%i", i]); [rowsToUpdate addObject:[NSString stringWithFormat:@"%i", i]]; NSLog(@"[rowsToUpdate count] = %i", [rowsToUpdate count]); }
There is no obvious problem with the code, and it doesn’t make sense to return 0.
After a couple of search, I found it on stackoverflow.com that I missed the initialization for “rowsToUpdate”. The fix is as follows (a couple lines of code added):
if (rowsToUpdate == nil) { rowsToUpdate = [[NSMutableArray alloc] init]; } else { [rowsToUpdate removeAllObjects]; } for (int i=0; i<[sites count]; i++) { NSLog(@"row index: %i, %@", i, [NSString stringWithFormat:@"%i", i]); [rowsToUpdate addObject:[NSString stringWithFormat:@"%i", i]]; NSLog(@"[rowsToUpdate count] = %i", [rowsToUpdate count]); }
Xcode Warning: “UIKeyboardBoundsUserInfoKey” is deprecated
NSURL Tips
# Loading a string from a website
(this will block until it loads)
NSURL *url; NSData *data; NSString *blork; url = [NSURL URLWithString: @"https://langui.net/"]; data = [url resourceDataUsingCache: NO]; blork = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];
# Loading an image from a website
(this will block until it loads)
NSURL *url; NSData *data; NSImage *blork; url = [NSURL URLWithString: @"https://langui.net/wp-content/uploads/2011/03/banner.png"]; data = [url resourceDataUsingCache: NO]; blork = [[NSImage alloc] initWithData: data];
# Open an URL in iphone safari
NSURL *url = [NSURL URLWithString: @"https://langui.net/"]; [[UIApplication sharedApplication] openURL: url];
More tips available here: http://borkware.com/quickies/
Calling C Functions from Objective-C
As Objective-C is a superset of C, it allows developers to mix pure c source files with Object-C source files.
But to call a C function from Objective-C, you should not import the .c file in your Objective-C .m file, that won’t work.
To call a C function from the Objective-C, you need to create a .h header file to include the C function declaration, and, of cause, include the .h file in the .c source file where the C function resides. Then import the .h file in the .m source file where you would like to call the C function, and simply call the function.