【发布时间】:2013-05-21 14:40:53
【问题描述】:
我有一个NSError ** 存储在一个数组中(所以我可以得到它这样的array[0])。我正在尝试将其转换为变量:
NSError * __autoreleasing *errorPointer = (NSError * __autoreleasing *)array[0];
所以我可以以*errorPointer 的身份访问底层对象。
但是,Xcode 抱怨 Cast of an Objective-C pointer to 'NSError *__autoreleasing *' is disallowed with ARC。有什么方法可以在不关闭 ARC 的情况下到达该对象?
【问题讨论】:
-
为什么存储为
NSError **而不仅仅是NSError *? -
我希望传入指针的人也可以使用错误对象。这是 Cocoa 中的常见模式,指针通常直接作为参数传入,而不是存储在数组中。
-
传递给方法时很常见,是的,但是当您将
NSError对象存储在数组中时,我看不出它是如何工作的。 -
你需要一个地址来获取双指针,真的,不要像这样使用 NSArray 的指针存储机制。自动释放参数适用于本地人。
-
我没有在生产代码中使用它。在我使用的单元测试框架 Kiwi 中,有一种方法可以让您存根选择器并用任何块替换其代码。它传递数组中的所有方法参数:
[beer stub:@selector(drinkByHand:error:) withBlock: id ^(NSArray *params) { Hand *hand = (Hand *)params[0]; // here I want to get the error and fill it in, so I can simulate a failure; return nil; }];
标签: objective-c pointers nserror