Forum iPhone, iPad, Apple Watch de iPhon.fr

Forum utilisateurs Apple iPhone, iPad, Apple Watch, forfaits et accessoires

Vous n'êtes pas identifié(e).

Annonce

Bienvenue sur le forum du blog iPhon.fr

Pensez à poster dans la bonne rubrique, respecter les propos des autres internautes, ne pas utiliser le langage SMS, et enfin, à utiliser la fonction 'Recherche' !
Et... Gardez le sens de l'humour, de la convivialité et de la décontraction. On n'est pas là pour se prendre la tête ! ;-)

#1 23-01-2011 20:56:29

iwalid
Membre
Inscription : 22-01-2011
Messages : 3

Objective-c - variables globales et NSMutableArray - out of scope

Bonjour tout le monde,
Je vous explique mon problème :

J'ai une classe MyObject qui contient un attribut de type MyObject2 :

@interface MyObject : NSObject {
	MyObject2 *myObject2;
}
@property (nonatomic, retain) MyObject2 *myObject2;
-(MyObject2 *) geObject2;
-(id) initMyObject;

----

@interface MyObject2 : NSObject {
	NSString *value;
}
@property (nonatomic, retain) NSString *value;
-(NSString *) getValue;

J'ai déclaré une classe Manager.h :

@interface Manager : NSObject {
	NSMutableArray *myObjectsList;
}
@property (nonatomic, retain) NSMutableArray *myObjectsList;
-(MyObject*) getItem:(int)itemID;
-(id) initManager;

Manager.m :

@implementation Manager
@synthesize myObjectsList;
 - (id)initManager {
	 self = [super init];
	 if (self) {
		//Controller
	       MyObject *myObject = [[MyObject alloc] initMyObject];
               self.myObjectsList = [NSMutableArray arrayWithObjects:myObject, nil];
	       [myObject release];
	 }
	 return self;
 }

-(MyObject*) getItem:(int)itemID{
	return	[self.myObjectsList objectAtIndex:itemID];
}
- (void)dealloc {
	[myObjectsList release];
        [super dealloc];
}

@end

Ce manager est accessible à tout mon code (avec extern) depuis une variable globale dans Commons.h :

@interface Commons
Manager *manager;
@end

Dans une classe de mon code je souhaite récupérer un élément du tableau à travers la variable globale Manager :

#import "Commons.h"
...
extern Manager *manager;
...
-(void) displayValue  {
		NSString *value = [[[manager getItem:1] geObject2] getValue];
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Value is" message:value delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
		[alert show];
		[value release];
		[alert release];
}

Voila j'espère que c'est clair smile
Le problème est que l'application plante lors de l'appel au displayValue
Avec le debugger je regarde la variable value de myObject 2 depuis le myObject1 qui est lui même contenu dans le tableau du Manager et le debugger m'indique "out of scope".

Deux questions se posent alors :
- dans la méthode getItem comment sa se passe au niveau gestion mémoire ? l'ai-je fait d'une manière correcte ?
- que veux dire "out of scope" ?

Je vous remercie par avance de vos réponses

iwalid

Hors ligne

#2 24-01-2011 00:09:21

_pierre_
Membre
Inscription : 24-01-2011
Messages : 17
Site Web

Re : Objective-c - variables globales et NSMutableArray - out of scope

pour ton manager, utilise plutot un singleton décris tout en bas ici :
http://developer.apple.com/library/ios/ … 4-CH4-SW32

Après ca doit être [manager getItem:0], l'index commence à 0 dans un tableau

Et t'auras plus de réponse sur ipup

Hors ligne

#3 28-01-2011 00:58:38

iwalid
Membre
Inscription : 22-01-2011
Messages : 3

Re : Objective-c - variables globales et NSMutableArray - out of scope

merci beaucoup pour ton aide pierre, je prend note de ton conseil wink

Hors ligne

Pied de page des forums

L'iPhone sur iPhon.fr, le blog de l'iPhone - blog iPad

iPhon.fr et son forum ne sont pas liés à Apple, Orange, SFR ou autres et les marques citées sont la propriété de leurs détenteurs respectifs.