2011-01-20 3 views
1

Hey! J'ai essayé d'ajouter un tableau à un NSMutableArray en utilisant la syntaxe addObject. L'application se bloque sans mention explicite d'une erreur. Pourriez-vous s'il vous plaît me dire comment cela est fait?Ajouter NSMutableArray à un autre NSMutableArray


J'ai une classe Stack qui crée un tableau. J'appelle donc cette classe en utilisant une instance appelée tem que j'ai créée. Par conséquent, [self tem] est mon appel au tableau. Grâce au programme, j'ajoute simplement UILabels au tableau (je sais que vous suggéreriez d'ajouter une chaîne et de passer à UILabels, mais je dois le faire de cette façon) et vers la fin, j'aimerais ajouter ce tableau à mon tableau. 'list' tableau.

-(Stack *)tem { 
    if(!tem) 
    tem=[[Stack alloc]init]; 
    return tem; 
} 

-(void)viewDidLoad{ 
    //code 
    list=[NSMutableArray arrayWithArray:[self list].array]; 
} 

-(IBAction)opPr:(UIButton *)sender 
{ 
    if([[[sender titleLabel]text] compare: @"="]==0) { 
    //code 
    UILabel *t=[[UILabel alloc]init]; 
    //complete creating label 
    [[self tem]push:t]; 
    //add above label to tem array 
    [list addObject:[self tem].array]; 
    [table reloadData]; 
    } 
} 
+4

Partagez votre code –

Répondre

3

OK, cette réponse a tous été encombrée de modifications. Je l'ai édité pour être plus clair, au détriment possible de comprendre le fil de la façon dont nous sommes arrivés à la réponse finale.

La réponse finale

La réponse était de changer:

list=[NSMutableArray arrayWithArray:[self list].array]; 

Pour:

list = [[NSMutableArray alloc] init]; 

(... Ce qui est pas vraiment la meilleure façon de créer un NSMutableArray, mais cela peut fonctionner quand même.)

Cette décision était fondée sur une version erronée du code du demandeur

Sur la base de votre commentaire qu'il se bloque après [list addObject:[self tem].array];, je dois conclure que votre variable d'instance list est de type Stack* et que la pile n'est pas une sous-classe de NSMutableArray. Si oui, c'est votre problème.

Dans ce cas, le changement de cette ligne à [[list array] addObject:[self tem].array]; devrait le réparer.

Ceci est juste un bon conseil

En aparté, un tableau NSMutable est parfaitement capable d'agir comme une pile sans modification. Exemple:

NSMutableArray* ar = [NSMutableArray arrayWithCapacity:someCapacity]; 
// Push 
[ar addObject:narf]; // narf being some object reference 
// Pop 
id popped = [ar lastObject]; 
[ar removeLastObject]; 

Si vous voulez encapsulant le comportement de la pile d'une manière cohérente sémantiquement, vous pouvez ajouter et pousser les méthodes pop à NSMutableArray en utilisant une catégorie. Cela rendrait votre code plus simple et moins sujet aux erreurs.

Ce fut mon premier coup de couteau à répondre à la question, avant que le code avait été posté

Ceci est un coup de poignard dans le noir puisque vous ne l'avez pas posté de code. MAIS. Une façon d'accomplir cela avec des tableaux est de créer des tableaux en utilisant [NSArray arrayWithObjects:obj obj ... nil] et en omettant le terminateur nul sur la liste des objets. Êtes-vous par hasard faire cela?

+0

Ok avant de poster un code, voici un petit résumé. J'ai une classe Stack qui crée un tableau. J'appelle donc cette classe en utilisant une instance appelée tem que j'ai créée. Par conséquent, [self tem] est mon appel au tableau.Grâce au programme, j'ajoute simplement UILabels au tableau (je sais que vous suggéreriez d'ajouter une chaîne et de passer à UILabels, mais je dois le faire de cette façon) et vers la fin, j'aimerais ajouter ce tableau à mon tableau. 'list' tableau. - Liste (pile *) { if (! Liste) list = [[Stack alloc] init]; liste de retour; } – Label

+0

Je suis désolé, j'ai modifié le code. Il y avait une petite erreur. J'ai posté le code corrigé en italique (il apparaît dans les astérisques) – Label

+0

S'il vous plaît jeter un oeil sur le code édité. La première méthode a été modifiée. Cela pourrait aider à clarifier les choses à propos de Stack et Array. Pour clarification: tem: instance de la classe Stack qui crée un NSMutableArray. liste: NSMutableArray créé dans la classe actuelle. – Label

Questions connexes