【问题标题】:Public class: Makes pointer from integer without cast公共类:从整数生成指针而不进行强制转换
【发布时间】:2010-05-22 23:21:42
【问题描述】:

为了我的 iPhone 应用程序的持久性,我编写了一个类来帮助保存和加载数据,但是我遇到了一些我正在传递的 NSUInteger 的问题。

基本上,我有使用指针的代码,但最终它必须开始成为一个实际值,对吧?所以我得到这个错误

warning: passing argument 1 of 'getSaveWithCampaign:andLevel:' makes pointer from integer without a cast

我的代码是这样布局的。

(持久化是类名)

NSDictionary *saveData = [Persistence getSaveWithCampaign:currentCampaign andLevel:[indexPath row]];

这里是 Persistence.m

#import "Persistence.h"


@implementation Persistence

+ (NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    return [documentsDirectory stringByAppendingPathComponent:kSaveFilename];
}

+ (NSDictionary *)getSaveWithCampaign:(NSUInteger *)campaign andLevel:(NSUInteger *)level
{
    NSString *filePath = [self dataFilePath];

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath])
    {
        NSDictionary *saveData = [[NSDictionary alloc] initWithContentsOfFile:filePath];

        NSString *campaignAndLevelKey = [self makeCampaign:campaign andLevelKey:level];

        NSDictionary *campaignAndLevelData = [saveData objectForKey:campaignAndLevelKey];

        [saveData release];

        return campaignAndLevelData;
    }
    else
    {
        return nil;
    }

}

+ (NSString *)makeCampaign:(NSUInteger *)campaign andLevelKey:(NSUInteger *)level
{
    return [[NSString stringWithFormat:@"%d - ", campaign+1] stringByAppendingString:[NSString stringWithFormat:@"%d", level+1]];
}   

@end

【问题讨论】:

  • 方法调用中currentCampaign的类型是什么?
  • 请告诉我们您调用getSaveWithCampaign的方法。
  • currentCampaign 是一个 NSUInteger 并且被声明和合成。

标签: iphone objective-c pointers casting persistence


【解决方案1】:

你应该在getSaveWithCampaign方法中去掉( NSUInteger *)中的*

如果您仔细阅读错误消息,它会指出您正在从一个没有强制转换的整数创建一个指针 (*)。

您的 getSaveWithCampaign 方法现在应该具有以下签名:

+ (NSDictionary *)getSaveWithCampaign:(NSUInteger)campaign andLevel:(NSUInteger)level

另一方面,如果出于某种原因您确实想使用指针,则可以传入带有 & 符号 (&) 前缀的 NSUInteger 以传入内存中 NSUInteger 的地址。

【讨论】:

  • 我对内存使用非常偏执,所以我尝试尽可能多地使用指针。对于这么小的值,听起来有点愚蠢。我正在尝试与符号的方法,如果可行,我会坚持使用它,除非我在路上感到头疼。感谢您简洁及时的回复!非常感谢您的帮助。
  • 您可以想象,之前的评论导致了错误的疯狂追逐。我简单地消除了对指针的需求,并且正在取得进展。我认为我对指针太过分了,并没有真正完全理解它们的用途。我走得更远了。
猜你喜欢
  • 2021-01-19
  • 2023-02-08
  • 2022-01-05
  • 1970-01-01
  • 2012-06-09
  • 2017-05-06
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多