2011-04-04 2 views
0

J'ai cadre défini dans mon settings.plist et accesing dans ma classe comme une chaîne en passant donne une erreur:cadre de passage Problème setting.plist

Voici le code:

NSString * frame = [selectable objectForKey:@"Frame"]; 
[self selectButtons:@"Select." andFrame:frame andValue:goal]; 


-(void)selectButtons:(NSString *)text andFrame:(NSString *)frame andValue:(int)goal 
{ 

    UIColor * c = [UIColor clearColor]; 
    UIFont * font = BUTTON_TITLE; 
    UIColor * f = DESC_Color_White; 
    select = [ApplicationHelpers buttonWithTitle:text andBgColor:c andTitleColor:f andTitleFont:font]; 
    CGRect frame1 = frame; -------->>>>>> gives error here 
    select.frame = frame1; 

    UIImage * buttonImage = [UIImage imageNamed:@"scneariosButtonSmall1.png"]; 
    UIImage * strechableButtonImage = [buttonImage stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    [select setBackgroundImage:strechableButtonImage forState:UIControlStateNormal]; 
    [select addTarget:self action:@selector(selectClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:select]; 

} 

S'il vous plaît donnez-moi un indice à ce sujet ???

Merci,

Répondre

2

Un NSString ne peut pas être converti implicitement entre un CGRect. Vous devez utiliser des fonctions telles que NSStringFromCGRect et CGRectFromString pour effectuer la conversion.

CGRect frame1 = CGRectFromString(frame); 

... 

// when you need to save the CGRect: 
NSString* frameString = NSStringFromCGRect(frame1); 
+0

Cela a fonctionné mais la seule chose est que je passe mon cadre en tant que CGRectMake (20, 30, 150, 54) et pendant le débogage j'ai vérifié qu'il ne donne aucune valeur. Je veux dire x, y, la largeur et la hauteur viennent tous à zéro. Donc, je dois définir le cadre dans mon fichier de paramètres différemment. – Ashutosh

+0

@Ashu: Vous voulez dire que la chaîne 'frame' est' @ "CGRectMake (20, 30, 150, 54)" '? – kennytm

+0

oui ... et j'ai compris qu'il devrait être défini comme ceci: {{x, y}, {w, h}} – Ashutosh

1

Vous ne pouvez pas simplement assigner une chaîne à une variable CGRect et attendre à ce que cela fonctionne. Vous devez convertir un type dans l'autre. Selon le format de votre chaîne de cadre, vous pouvez utiliser la fonction CGRectFromString() (utilisez NSStringFromCGRect()) pour créer une chaîne correspondante à partir d'un CGRect. Ou vous devez analyser la chaîne manuellement.

Ou, mieux encore, envelopper votre valeur de trame dans un NSValue avec +[NSValue valueWithCGRect:] et -[NSValue CGRectValue].

Questions connexes