On Feb 26, 2009, at 12:58 AM, Kenneth Ramey wrote:

I have a method, written in Objective-C, to parse a string, extracting several fields from it. Originally, I was pulling out a couple of float values and some int fields. Other fields in the string need to be treated as substrings. As I researched how to deal with the substrings, I came to the conclusion that it might be easier to treat all of the fields as substrings. So I re-wrote the method to use NSString variables for each of the fields extracted from the main string by an instance of NSScanner.

Now, when I run my program, I get the following error on the console when execution enters the method in question:

Did you forget to nest alloc and init?

This message is repeated different numbers of time each execution. By commenting out various parts of the code and using the debugger to examine variables I find that one or more of the NSString variables are actually listed as NSPlaceholderString variables and there is a direct correlation between the number of "...Placeholder..." variables and the number of messages that are printed. If I comment out all the NSString variables, the messages go away. Which variables appear to be "...Placeholder..." variables also changes on each execution.

Here is the fragment of code in question. The basic template came from an Apple example of using NSScanner:

- (void) processFixRecord:(NSString *) dataString
{
        NSString *fixTime;
        NSString *fixLat;
        NSString *fixLong;
        NSString *northSouth;
        NSString *eastWest;
        
NSCharacterSet *skipSet = [NSCharacterSet characterSetWithCharactersInString:@" ,\n"]; NSScanner *dataRecord = [[NSScanner alloc] initWithString:dataString];
        [dataRecord scanUpToCharactersFromSet:skipSet intoString:&fixTime];
        ...

Anyone have any suggestions? I also tried doing "alloc" and "init" on each NSString (despite the Apple NSScanner example) with no change in behavior and setting each variable to "nil", which also produced no change.

I tried this myself with a simple test app which you can find at:

http://ericgorr.net/cocoadev/Scanner.zip

Basically, I just did:

@implementation AppController

- (void) awakeFromNib
{
    NSString *fixTime;
    NSString *dataString    = @"hello there";


NSCharacterSet *skipSet = [NSCharacterSet characterSetWithCharactersInString:@" ,\n"]; NSScanner *dataRecord = [[NSScanner alloc] initWithString:dataString];

    [dataRecord scanUpToCharactersFromSet:skipSet intoString:&fixTime];

    NSLog( @"%@", fixTime );
}

@end


the output in the log after running the application:

******
******
******
[Session started at 2009-02-26 17:04:15 -0500.]
Loading program into debugger…
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin".tty /dev/ttys004
Program loaded.
sharedlibrary apply-load-rules all
run
[Switching to process 4115 local thread 0x2d03]
Running…
2009-02-26 17:04:18.479 Scanner[4115:813] hello

Debugger stopped.
Program exited with status value:0.
^^^^^^
^^^^^^
^^^^^^

It worked for me without any problems at all.

Unfortunately, I do not know what else you code might be doing that would cause the behavior you are seeing.





_______________________________________________

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

Reply via email to