很抱歉,如果发现很多线程,但他们不是关于这个错误** - 事情。
我尝试'设计'我的方法,就像我找到的错误示例。但是调用第二个,错误并没有指向nil,调试器说error: summary string parsing error
。
这是我的控制器方法:
-(void) refresh {
NSError *error;
ServerApi *serverApi = [mainModel newServerApi];
NSArray *newItems = [serverApi getNewItems: &error];
...
这是被调用的方法:
- (NSArray *) getNewItems: (NSError **) error {
// Breakpoint here, error is: 'error: summary string parsing error'
...
NSURLResponse *response;
NSData *responseData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: error];
我想,我和Apple一样sendSynchronousRequest...
。他们的评论告诉
error Out parameter (may be NULL) used if an error occurs
while processing the request. >>>>Will not be modified if the
load succeeds.<<<<
我做错了什么,为什么这对苹果sendSynchronousRequest...
有效?
答案 0 :(得分:2)
代码很好,因为error
不需要“从外部”初始化。
此外,如果您使用ARC it will automatically initialize本地对象指针nil
,那么
NSError *error;
与
没什么不同NSError *error = nil;
ARC下。
虽然显式初始化仍然是一种很好的做法,但这不是任何错误的来源。
话虽如此,
摘要字符串解析错误
是lldb
错误。我的假设是它被双指针搞糊涂了,但我不会太担心。
顺便说一句,你在实现这种模式时犯了一个小错误。
可能失败的同步方法,应该返回一个BOOL
值,指示计算是否成功,然后客户端将检查该值,然后检查error
对象,以防它失败。
检查error
对象通常是个坏主意:即使某些Apple API可能会失败并返回nil错误,所以请避免这样做!
答案 1 :(得分:1)
请记住在refresh
中将指针设置为nil:
NSError *error = nil;
另外,请记住,您的支票应该是:
(*error)
nil
(又名“没有传递错误”) - 操作可能成功也可能没有成功; error
NULL
(又名“没有传递NSError*
指针,所以不要为它指定对象”。