And*_*rea 3 iphone objective-c
我是Objective-c的新手,这是我的第一篇文章.这是我的问题:
在我的主文件中,我有一个变量:NSString*var; 然后我有一个功能:
-(BOOL) myfunction:(NSString *)myvar {
myvar = @"OK!";
return YES;
}
Run Code Online (Sandbox Code Playgroud)
现在在我的主文件中:
NSString *var;
BOOL control = myfunction:var;
if(control)
NSLog(@"var is: %@",var);
Run Code Online (Sandbox Code Playgroud)
但输出是"var is:".如果我建在调试模式下,将断点设置在函数的开始MyFunction的内存地址MYVAR等于为VAR,但分配后的地址MYVAR是从的地址不同的变种.我该如何解决?提前致谢!
虽然到目前为止给出的答案是正确的.我认为一个更相关的问题是你为什么要这样做.
它看起来你想要一个防御性编程风格,其中返回代码表示成功或失败.
更像Objective-C的方法是传递字符串和NSError **作为参数并返回字符串或nil以指示失败,如错误处理编程指南中所述
所以写这个的方法是:
- (NSString *)aStringWithError:(NSError **)outError {
returnString = @"OK";
if (!returnString) {
if (outError != NULL) {
NSString *myErrorDomain = @"com.company.app.errors";
NSInteger errNo = 1;
*outError = [[[NSError alloc] initWithDomain:myErrorDomain code:errNo userInfo:nil] autorelease];
}
}
return returnString;
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
NSError *error;
NSString *stringVariable = [self aStringWithError:&error];
if (!stringVariable) {
// The function failed, so it returned nil and the error details are in the error variable
NSLog(@"Call failed with error: %ld", [error code]);
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,但您可以看到,您可以构造并返回有关错误的更有意义的信息,而不仅仅是它是否成功.
从语法上讲,您需要像这样修复 myFunction 调用:
BOOL control = [self myfunction:var];
这里真正的问题是,在 myFunction 内部,您仅将字符串值分配给本地字符串变量,而您想要更改它指向的基础字符串。 这在 Obj-C 中通常是错误的方法,但你可以这样做:
-(BOOL)myfunction:(NSString **)myvar
{
*myvar = @"OK!";
return YES;
}
NSString *var;
BOOL control = [self myfunction:&var];
if(control)
NSLog(@"var is: %@",var);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3405 次 |
| 最近记录: |