将'void'发送到不兼容类型'id'的参数

时间:2014-09-17 12:35:53

标签: objective-c xcode5 incompatibletypeerror

在目标C中,我有:

NSMutableArray *retVal = [[NSMutableArray alloc]initWithCapacity:1];
NSMutableString *justTest = [[NSMutableString alloc]initWithString:@"hello"];
unsigned char ch = //anything
[retVal insertObject:[justTest appendFormat:@"%hhu", ch] atIndex:0]; //error here

X Code 5.1.1在第4行给我一个错误(如评论所述)为Sending 'void' to parameter of incompatible type 'id'

我在这里做错了什么?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

如果您读过Apple Documentation for NSMutableString,您会发现实例方法appendString:实际上没有返回值。它将结构化字符串添加到接收的末尾,就是这样。

因此,当您执行[retVal insertObject:[justTest appendFormat:@"%hhu", ch] atIndex:0];时,您确实在做[retVal insertObject:void atIndex:0];,显然您无法将void作为期望id的有效对象的参数传递。

以下是方法声明:- (void)appendFormat:(NSString *)format ...您可以看到返回类型为void

所以你需要做的是在将字符串传递给insertObject:atIndex:方法之前需要对字符串进行修改。

所以改为

[justTest appendFormat:@"%hhu", ch]; // Append to existing string, DOESN'T return anything
[retVal insertObject:justTest atIndex:0]; // Pass string in as object at index

答案 1 :(得分:0)

appendFormat没有返回任何内容,它会调整可变字符串。你需要这样做:

NSMutableArray *retVal = [[NSMutableArray alloc]initWithCapacity:1];
NSMutableString *justTest = [[NSMutableString alloc]initWithString:@"hello"];
unsigned char ch = //anything
[justTest appendFormat:@"%hhu", ch]
[retVal insertObject:justTest atIndex:0]; //error here

答案 2 :(得分:0)

[justTest appendFormat:@"%hhu", ch]返回无效。 你需要:

[retVal insertObject:([justTest appendFormat:@"%hhu", ch],justTest) atIndex:0];