2012-08-07 3 views
0

Je travaille sur une application de flux Facebook pour l'iPhone qui, entre autres choses, détermine si une image est attachée à un message et la stocke dans un tableau. Quand je lance le code, mes NSLogs me disent que rien n'est mis dans le tableau, même s'il est en train de lire s'il y a ou non une objectAtKey: @ "picture". Ce qui suit est une partie de mon code.iOS: impossible de stocker une chaîne dans un tableau

de MasterView.m:

//create array containing individual "datas" 
NSArray *items = [json objectForKey:@"data"]; 

for(NSDictionary *item in items) 
{ 
    // store message in ItemStore sharedStore 
    if([item objectForKey:@"message"] || [item objectForKey:@"message"] != nil || 
     [[item objectForKey:@"message"] length] > 0){ 
     [[JSONFeedItemStore sharedStore] createItem:[item objectForKey:@"message"]]; 
    } 

    // 
    if([item objectForKey:@"picture"]){ 
     [[JSONFeedItemStore sharedStore] createPicture:[[item objectForKey:@"picture"] description]]; 
     NSLog(@"url: %@", [item objectForKey:@"picture"]); 
    } else { 
     [[JSONFeedItemStore sharedStore] createPicture:@"http://i.imgur.com/TpIK5.png"]; // blank 
     NSLog(@"creating blank picture"); 
    } 
} 

de ItemStore.m

- (void)createPicture:(NSString *)pictureUrl 
{ 
    [pictures addObject:pictureUrl]; 
    NSLog(@"Number: %d, URL: %@", [pictures count], [pictures objectAtIndex:[pictures count]]); 
} 

et ma console

2012-08-07 08:21:54.153 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.154 JSONFeed[2502:f803] creating blank picture 
2012-08-07 08:21:54.155 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.156 JSONFeed[2502:f803] creating blank picture 
2012-08-07 08:21:54.157 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.157 JSONFeed[2502:f803] url: http://photos-a.ak.fbcdn.net/hphotos-ak-ash4/423482_427478620624383_82270372_s.jpg 
2012-08-07 08:21:54.158 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.158 JSONFeed[2502:f803] creating blank picture 

SharedStore est une partie d'une classe de ItemStore créé pour stocker les messages et des photos de messages Facebook. Si vous avez des questions, ou besoin de voir plus de code, n'hésitez pas à demander. Je prends également des suggestions d'amélioration, car je suis encore novice dans la programmation d'applications.

+0

Quand vous appelez 'createPicture', pourquoi envoyez-vous' [[object objectForKey: @ "image"] description] 'au lieu de simplement' [item objectForKey: @ "image"] '? –

+0

La parenthèse supplémentaire est parce que j'appelle la description de cet objet. Le reste de cet appel est [[object objectForKey: @ "picture"] description]. – Chance

+0

Je sais pourquoi le support supplémentaire est là, mais pourquoi utiliser 'description'? –

Répondre

3

Une possibilité est que pictures est nul. Vous ne pouvez pas ajouter d'objets à un tableau si le tableau n'existe pas, et il est légal d'envoyer des messages à zéro. Le résultat obtenu sera également nul ou nul, ainsi votre appel au -objectAtIndex: enregistre "(null)".

+0

Merci, Caleb. J'ai certainement fait une erreur Freshman sur celui-ci! J'ai oublié d'initialiser le tableau. – Chance

3

Pour un, quand vous faites quelque chose comme ceci;

[array objectAtIndex:[array count]]; 

Vous allez obtenir un objet nil, parce que par définition objectAtIndex:array.count est au-delà des limites du tableau, comme tous les tableaux sur la programmation sont 0 indexées

Qu'est-ce que vous avez besoin est

[array objectAtIndex([array count]-1)]; 
+0

ou vous pouvez utiliser [tableau lastObject] qui est plus facile à lire –

+0

@Dan F, bien que votre réponse n'était pas la solution réelle au problème, il a souligné une faille dans mon code, donc je l'ai upvoted. Merci pour l'aide! – Chance

Questions connexes