I know the title of this question is a bit confusing, but here it goes anyway:
I’m creating an NSString after an if statement but it just doesn’t seem to want to retain outside of the statement. My conditional looks like this:
if ([[password stringValue] isEqualToString:@""]) {
NSString *pwd = [[NSString alloc]initWithString:@"password"];
}
else {
NSString *pwd = [[NSString alloc]initWithFormat:@"%@", [password stringValue]];
}
… and I call pwd later in the script like this:
NSArray *arguments;
arguments = [NSArray arrayWithObjects: ip, pwd, nil];
[task setArguments: arguments];
But when I do so in this way, the first snippet returns a warning of Unused variable 'pwd' and the latter call ends up in an error of 'pwd' undeclared.
What am I doing wrong here? Thanks in advance. 😉
Use:
NSString* pwd = nil; if ([[password stringValue] isEqualToString:@""]) { pwd = [[NSString alloc]initWithString:@"password"]; } else { pwd = [[NSString alloc]initWithFormat:@"%@", [password stringValue]]; }The problem is that each block introduces a scope. A variable exists only in the scope in which it is defined (a variable exists from the point of declaration to the end of the scope it is declared). Although the memory pointed to by “pwd” will outlast the if…else block, the pointer named pwd will cease to exist after the if…else block in which it is declared. Declaring the pointer before the block moves pwd up one scope.