Objective c NSScanner仅处理未初始化的变量。为什么?

Objective c NSScanner仅处理未初始化的变量。为什么?,objective-c,cocoa,nsscanner,Objective C,Cocoa,Nsscanner,下面的代码可以工作,但会生成有关未初始化变量的警告 该代码解析表示分子的字符串,如@“2C12;5H1;1O16”。检查其格式是否正确,以及所有成分是否为有效同位素。如清单所示,它工作正常,但会从编译器生成警告 //listOfNames is a global variable, an NSArray containing strings of all isotope names i.e. @"Na23" -(bool)canGrokSpeciesName:(NSString*)theSpe

下面的代码可以工作,但会生成有关未初始化变量的警告

该代码解析表示分子的字符串,如@“2C12;5H1;1O16”。检查其格式是否正确,以及所有成分是否为有效同位素。如清单所示,它工作正常,但会从编译器生成警告

//listOfNames is a global variable, an NSArray containing strings of all isotope names i.e. @"Na23"

-(bool)canGrokSpeciesName:(NSString*)theSpeciesName{
 //Test that the species name makes sense
 //Names should be of the form of repeated @"nnSSaa" with nn being the multiplier, SS being the element name, aa being the atomic mass number

bool couldGrok = [theSpeciesName isNotEqualTo:@""];
if(couldGrok){

    NSArray* listOfAtomsWithMultiplier = [theSpeciesName componentsSeparatedByString:@";"];

    for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) NSLog(@"%@", [listOfAtomsWithMultiplier objectAtIndex:i]);

    NSInteger multiplet[ [listOfAtomsWithMultiplier count] ];
    bool ok[ [listOfAtomsWithMultiplier count] ];

    bool noFail = true;
    for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) {
        NSScanner* theScanner = [NSScanner scannerWithString:[listOfAtomsWithMultiplier objectAtIndex:i]];
        NSString* multipletString;

        if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet letterCharacterSet] intoString:&multipletString];
        multiplet[i] = [multipletString integerValue];

        NSString* atomString;
        if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&atomString];

        NSInteger A;
        if(![theScanner isAtEnd]) [theScanner scanInteger:&A];

        NSLog(@"%@%i with multiplet of %i", atomString, (int)A, (int)multiplet[i]);
        bool hasBeenFound = false;
        for(int j=0; j<[listOfNames count]; j++){
            if(noFail) hasBeenFound = hasBeenFound || [[listOfNames objectAtIndex:j] isEqualToString:[NSString stringWithFormat:@"%@%i", atomString, (int)A]];
        }
        couldGrok = couldGrok && noFail && hasBeenFound;
    }
}

return couldGrok;
然后NSScanner返回它们的初始初始化值。我缺少一些基本的东西吗


我不希望忽略来自编译器的警告,但是遵循编译器的建议会破坏代码。因此,我想这更多的是对基本信息的请求,而不是对如何修复代码的请求。谢谢

修复示例代码:
listOfNames
未声明。同样作为ObjC约定变量名,以小写字母开头。请您解释一下您想要的确切输出??listOfNames是一个包含所有允许的同位素名称的NSArray,如@“Na23”等。目标是获取一个分子,如@“2H1;1O16”,并验证组分同位素是否有效。代码按照发布的方式工作,但我收到编译警告,建议我初始化上面提到的三个变量。这样做会导致代码不再工作……您是否仔细检查了代码以了解在这两种情况下(初始化和未初始化)会发生什么情况?另外,为什么要将它们初始化为字符串而不是,例如,
NSString*multipletString=nil
NSInteger A=0
NSString* multipletString = @"";
NSString* atomString = @"";
NSInteger A = -1;