相关疑难解决方法(0)

NSError和__autoreleasing

有人可以__autoreleasing在下面的示例代码块中向我解释一下目的吗?

- (void)execute:(NSError * __autoreleasing *)error {
    // do stuff, possibly assigning error if something went wrong
}
Run Code Online (Sandbox Code Playgroud)

我删除了__autoreleasing所有东西似乎仍然编译/运行正常.我开始使用obj-c后ARC,所以我从来没有真正学过/理解所有那些双下划线的东西.我已阅读ARC过渡指南,但我不完全了解他们的NSError示例.

objective-c automatic-ref-counting

36
推荐指数
1
解决办法
2万
查看次数

NSError*vs NSError**

我意识到这与现有帖子类似,(NSError**)错误是什么意思?,但我的问题有点不同.我理解双指针是如何工作的,以及这是常见的iOS API错误模式.我的问题更多的是关于单指针,以及为什么这段代码不起作用:

- (BOOL)someMethodWithError:(NSError *)error
{
  ...
  if( errorOccured )
  {
    NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
    error = e;
    return NO;
  }

  return YES;
}
Run Code Online (Sandbox Code Playgroud)

实施使用:

NSError *error = nil;
if( ![someObj someMethodWithError:error] )
{
  NSLog(@"Error: %@", [error localizedDescription]);
}
Run Code Online (Sandbox Code Playgroud)

为什么方法实现中的赋值不会将指针重新分配给新的NSError对象?

objective-c ios

8
推荐指数
1
解决办法
2736
查看次数

NSUserScriptTask遇到困难

我一直试图用最近的NSUserScriptTask类及其子类来做(看到这个这个),到目前为止我已经解决了一些问题,但还有一些问题仍有待解决.从文档中可以看出,NSUserScriptTask不允许取消任务.因此,我决定创建一个简单的可执行文件,将脚本的路径作为参数并运行脚本.这样,我可以使用NSTask从我的主应用程序启动帮助程序,并[task terminate]在必要时调用.但是,我要求:

  • 主应用程序从它启动的助手接收输出和错误
  • 帮助程序仅在NSUserScriptTask完成时终止

主应用程序的代码很简单:只需使用正确的信息启动NSTask即可.这就是我现在所拥有的(为了简单起见,我忽略了安全范围的书签之类的代码,这些代码都没有问题.但是不要忘记这是运行沙盒的):

// Create task
task = [NSTask new];
[task setLaunchPath: [[NSBundle mainBundle] pathForResource: @"ScriptHelper" ofType: @""]];
[task setArguments: [NSArray arrayWithObjects: scriptPath, nil]];

// Create error pipe
NSPipe* errorPipe = [NSPipe new];
[task setStandardError: errorPipe];

// Create output pipe
NSPipe* outputPipe = [NSPipe new];
[task setStandardOutput: outputPipe];

// Set termination handler
[task setTerminationHandler: ^(NSTask* task){        
    // Save output
    NSFileHandle* outFile = [outputPipe fileHandleForReading];
    NSString* output = [[NSString alloc] initWithData: …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nstask appstore-sandbox

7
推荐指数
1
解决办法
1020
查看次数

Objective*中的"*"是什么意思?

有时我遇到的代码有*,有时**.任何人都可以解释它们在Objective C中的含义吗?(我曾经是一名Java程序员,具有C/C++经验.)

programming-languages objective-c

1
推荐指数
1
解决办法
1503
查看次数

NSError*返回的地址不好 - 为什么?

在下面的代码中,返回时,NSError在XCode中显示类型为"HomeViewController" - 我的一个视图控制器.如果我用双指针做了一些与众不同的事情,这是有道理的,但我没有.为什么会这样?我的代码中是否存在一些愚蠢的错误,核心数据中的错误或????

希望我不是自欺欺人!

self->ctx = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest * request = [[NSFetchRequest alloc] init];

NSEntityDescription *entityDescription = [NSEntityDescription
                                          entityForName:@"Street" inManagedObjectContext:self->ctx];

NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc]
                                    initWithKey:@"street" ascending:YES];
NSArray* sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];


[request setEntity:entityDescription];
[request setSortDescriptors:sortDescriptors];

NSError * error;
NSArray *array = [self->ctx executeFetchRequest:request error:&error];
if(error!=nil){
    NSLog(@"%@", @"Critical model error search");
}
_streets = array;
Run Code Online (Sandbox Code Playgroud)

xcode objective-c

1
推荐指数
1
解决办法
298
查看次数