2010-05-22 5 views
0

J'ai écrit une classe pour aider à sauvegarder et à charger des données par souci de persistance pour mon application iPhone mais j'ai un problème avec certains NSUIntegers que je traverse.Classe publique: Donne un pointeur à partir d'un entier

Fondamentalement, j'ai le code pour utiliser des pointeurs, mais finalement il doit commencer par être une valeur réelle droite? Donc, je reçois cette erreur

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

Mon code est présenté comme tel.

(persistance est le nom de la classe)

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

Voilà 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 
+1

Quel est le type de 'currentCampaign' dans l'appel de méthode? – Endemic

+0

Veuillez nous indiquer la méthode dans laquelle vous appelez 'getSaveWithCampaign'. –

+0

currentCampaign est un NSUInteger et est déclaré et synthétisé. – meridimus

Répondre

2

Vous devez vous débarrasser du * dans (NSUInteger *) dans la méthode getSaveWithCampaign.

Si vous lisez le message d'erreur près, il indique que vous faites un pointeur (*) à partir d'un nombre entier sans plâtre.

Votre méthode getSaveWithCampaign devrait maintenant avoir la signature suivante:

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

Si, d'autre part, pour une raison quelconque vous ne voulez utiliser des pointeurs, vous pouvez passer dans le NSUInteger préfixé avec un l'esperluette (&) pour passer l'adresse du NSUInteger en mémoire.

+0

Je suis vraiment paranoïaque sur l'utilisation de la mémoire, donc j'essaie d'utiliser autant que possible les pointeurs. Cela semble un peu bête pour de si petites valeurs. J'essaie la méthode de l'esperluette, si cela fonctionne, je m'en tiendrai à moins que j'aie des maux de tête sur la route. Merci pour votre réponse concise et rapide! Votre aide est grandement appréciée. – meridimus

+1

Comme vous pouvez l'imaginer, ce commentaire a abouti à une chasse aux oies sauvages d'erreurs. J'ai simplement supprimé le besoin de pointeurs et je fais des progrès. Je pense que j'étais trop au top avec des pointeurs et que je ne comprenais pas vraiment comment ils devaient être utilisés. Je vais plus loin. – meridimus

Questions connexes