HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用一个方法创建一个NSInvocation对象,该方法将指向NSError对象的指针作为参数.这方面的一个例子是 – 方法

- (BOOL)writeToFile:(NSString *)path options:(NSDataWriTingOptions)mask error:(NSError **)errorPtr

我强调,我会像这样设置我的调用

NSData *myData = [[NSData alloc] init];

SEL writeToFileSELEctor = @SELEctor(writeToFile:options:error:);
NSMethodSignature *signature = [NSData instanceMethodSignatureForSELEctor:writeToFileSELEctor];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:myData];
[invocation setSELEctor:writeToFileSELEctor];

NSString *String = [NSString StringWithFormat:@"long cat"];
NSDataWriTingOptions *dataOptions;
*dataOptions = NSDataWriTingFileProtectionComplete;

[invocation setArgument:&String aTindex:2];
[invocation setArgument:&dataOptions aTindex:3];

对于writeToFile:选项:错误:最后一个参数期望接收指针而不是对象.因此,执行以下操作无效 –

NSError *err = nil;
[invocation setArgument:&err aTindex:4];

似乎合乎逻辑的是,解决方案可能是创建指向指针的指针,但这会导致编译器警告.我不确定如何正确执行,而不是创建内存管理问题.

解决方法

您创建的参数与您传递给方法的任何其他参数相同.

正如您所指出的,方法签名需要NSError **为其最后一个参数(索引4).所以,你需要声明一个,但有一些问题.

NSError ** errorPointer

给你一个指向NSError变量的变量.但是,既然你没有告诉它指向任何变量,它指的是零.因此,当您触发调用时,选择器将无法更改错误指针指向的变量.换句话说,它就像调用[myData writeToFile:String options:dataOptions error:NULL].

因此,您还需要声明一个NSError变量,并将其地址指定为您的errorPointer应指向的变量:

NSError *error;
NSError **errorPointer = &error;

现在您可以将errorPointer作为参数传递,如果在调用方法时出现问题,您将能够稍后检查它.查看this post on NSInvocation以获得更多帮助(帽子提示Mark Dalrymple指出博客文章)

重要的是还要意识到应该为您创建的参数虑范围并将其传递给您的调用.看一下我问here的类似问题.

大佬总结

以上是大佬教程为你收集整理的ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象全部内容,希望文章能够帮你解决ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。