At 9:20 -0600 26/2/09, James Cicenia wrote:
Peter -
Thank you that does clear up a lot. And now it works beautifully on
my iphone in simulator mode.
However, when I ad-hoc it to my phone... it doesn't work. I get this
in my log:
11 Foundation 0x306cab10
_NSArrayRaiseInsertNilException + 48
12 Foundation 0x3066f8ec -[NSCFArray
insertObject:atIndex:] + 152
13 Foundation 0x3066f844 -[NSCFArray addObject:] + 30
14 WhatsFresh 0x0000c796 -[Sqlite
executeQuery:] (Sqlite.m:122)
15 WhatsFresh 0x00004946
-[WhatsFreshAppDelegate statesForItemAndMonthAndFresh:month:fresh:]
So is there something "different" that I have to do for the iphone itself?
Given it is rasing an NSArrayRaiseInsertNilException exception, I
would presume that the value you are trying to add is nil (if the
array itself was nil, you would not get an exception). Ie, you are
doing effectively:
[currentStates addObject:nil];
So look at whatever is creating the object. If the line is still:
[self.currentStates addObject:(str) ? [NSString
stringWithUTF8String:str] : @""];
then the problem must be that str is not valid UTF-8.
The stringWithUTF8String: documentation does not specify what happens
if the C string is not UTF-8, however the initWithCString:encoding:
says the results are undefined in this case, and the
initWithData:encoding: method explicitly states nil is returned.
Enjoy,
Peter.
Thanks
James
On Feb 26, 2009, at 8:10 AM, Peter N Lewis wrote:
At 6:50 -0600 26/2/09, James Cicenia wrote:
In .h :
NSMutableArray *currentStates;
@property (nonatomic, copy) NSMutableArray *currentStates;
Now in my appdelegate I have:
@synthesize currentStates;
then in a method:
while (sqlite3_step(statement) == SQLITE_ROW) {
char *str = (char *)sqlite3_column_text(statement, 0);
[self.currentStates addObject:(str) ? [NSString
stringWithUTF8String:str] : @""];
}
However currentStates never gets populated and always has zero objects.
What am I doing wrong. And, yes str has data.
Where is currentStates actually allocated?
Initially all ivars are set to nil (or 0 or whatever). So unless
you've set it somewhere, self.currentStates will return nil, and in
Objective C, you can send a message to nil and it is simply a NoOp
(ie, you wont get any error or exception).
currentStates needs to be allocated.
The next issue (and this is almost certainly where your problem is)
is that your @property is set to copy, so:
[self.currentStates addObject:@"hello"];
is equivalent:
[[self currentStates] addObject:@"hello"];
And [self currentStates] returns a copy of the NSMutableArray. And
so you create a copy, then you add the string, then it is
autoreleased.
So the issue is that the property specified "copy", which I don't
think actually makes sense for a NSMutableArray (besides
[NSMutableArray copy] actually returns an immutable NSArray (is
there any way to specify mutableCopy in an @property?)).
So you probably need to change the @property from copy to retain.
Alternatively, use the property without the setter/getter reference, ie:
[currentStates addObject:@"hello"];
I hope that clears up more than it confuses,
Peter.
@interface TestObject : NSObject {
NSMutableArray *currentStates;
}
@property (nonatomic, retain) NSMutableArray *currentStates;
@end
@implementation TestObject
@synthesize currentStates;
- (id) init
{
self = [super init];
if (self != nil) {
self.currentStates = [NSMutableArray array];
}
return self;
}
- (void) Test;
{
[self.currentStates addObject:[NSString stringWithUTF8String:"Hello"]];
}
- (void) dealloc
{
[currentStates release];
[super dealloc];
}
@end
int main(int argc, char *argv[])
{
NSLog( @"main" );
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
TestObject* obj = [[TestObject alloc] init];
[obj Test];
NSLog( @"%@", obj.currentStates );
[pool release];
// return NSApplicationMain(argc, (const char **) argv);
}
--
Run macros from your iPhone with Keyboard Maestro Control!
or take a break with Aragom Space War for your iPhone
Keyboard Maestro <http://www.keyboardmaestro.com/> Macros for your Mac
Aragom Space War <http://www.stairways.com/iphone/aragom> Don't get killed!
<http://www.stairways.com/> <http://download.stairways.com/>
_______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/james%40jimijon.com
This email sent to ja...@jimijon.com
--
Run macros from your iPhone with Keyboard Maestro Control!
or take a break with Aragom Space War for your iPhone
Keyboard Maestro <http://www.keyboardmaestro.com/> Macros for your Mac
Aragom Space War <http://www.stairways.com/iphone/aragom> Don't get killed!
<http://www.stairways.com/> <http://download.stairways.com/>
_______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com