我有一个返回Card* NSObject的方法(为了明确,这是我自己发明的一个对象,我在Card.h和Card.m中正确而成功地定义了这个对象):
-(Card*)readCardFromArrayWithCustomObjFromUserDefaults:(NSIndexPath *)indexPath;
{
NSData *existingData = [[NSUserDefaults standardUserDefaults] objectForKey:@"Deck"];
// if no such data exists, return nil
if (existingData == nil)
return nil;
NSArray *existingDeck = [NSKeyedUnarchiver unarchiveObjectWithData:existingData];
return [existingDeck objectAtIndex:indexPath.row];
}在我看来,这显然应该返回一个Card*,但是,当我从另一个方法调用它时,如下所示:
Card* selectedCard = readCardFromArrayWithCustomObjFromUserDefaults(indexPath);我收到警告:
弧不允许隐式“int”到“Card*”的转换
我想,问题可能是在返回之前我并没有将其转换为Card*,但是如果我将readCardFromArrayWithCustomObjFromUserDefaults方法显式转换为此,则仍然会收到相同的警告:
Card* thisCard = [existingDeck objectAtIndex:indexPath.row];
return thisCard;为了明确起见,我知道这确实返回了一个Card*,因为当我将相同的代码放入调用它的函数(而不是将其分离到自己的readCardFromArrayWithCustomObjFromUserDefaults方法中)时,就会得到Card*。我试图通过将这个使用过的代码部分放入它自己的方法来精简我的代码,并对它为什么不能工作感到困惑。
我尝试返回我的卡片的整个NSArray*,但这会导致同样的警告(只是隐式转换到NSArray*而不是“Card*”)。对于此警告的现有答案,如this和this,似乎与我的情况无关(除非我真的遗漏了什么)。
关于可能发生的事情,我有两个想法:
Card*返回方法返回一个int,这让我觉得我得到了一个指针,而我的代码由于某种原因不明白指针指向一个Card*)。我做错了什么?
发布于 2016-07-21 20:15:19
我觉得自己太愚蠢了。再说一遍,堆叠溢出是一个让你感到愚蠢的地方。问题是我在c和C#中的编码时间太长了,所以我错误地调用了该方法。我应该写的是:
Card* thisCard = [self readCardFromArrayWithCustomObjFromUserDefaults:indexPath];而不是:
Card* selectedCard = readCardFromArrayWithCustomObjFromUserDefaults(indexPath);https://stackoverflow.com/questions/38513394
复制相似问题