2009-07-29 9 views
2

J'ai téléchargé MGTwitterEngine et ajouté à mon projet iPhone. C'est se connecter et obtenir des statues que je peux dire de les jeter dans un NSLog. Mais, je ne peux pas comprendre comment j'ai besoin d'analyser les appels afin que je puisse les ajouter à une table. Ils sont retournés comme NSString et ressemblent à ceci:MGTwitterEngine et iPhone

 { 
    "created_at" = 2009-07-25 15:28:41 -0500; 
    favorited = 0; 
    id = 65; 
    source = "<a href=\"http://twitter.com/\">Twitter</a>"; 
    "source_api_request_type" = 0; 
    text = "The wolf shirt strikes again!! #sdcc :P http://twitpic.com/blz4b"; 
    truncated = 0; 
    user =   { 
     "created_at" = "Sat Jul 25 20:34:33 +0000 2009"; 
     description = "Host of Tekzilla on Revision3 and Qore on PSN. Also, a geek."; 
     "favourites_count" = 0; 
     "followers_count" = 0; 
     following = false; 
     "friends_count" = 0; 
     id = 5; 
     location = "San Francisco"; 
     name = "Veronica Belmont"; 
     notifications = false; 
     "profile_background_tile" = false; 
     "profile_image_url" = "http://blabnow.com/avatar/Twitter_10350_new_twitter_normal.jpg"; 
     protected = 0; 
     "screen_name" = Veronica; 
     "statuses_count" = 2; 
     "time_zone" = UTC; 
     url = "http://www.veronicabelmont.com"; 
     "utc_offset" = 0; 
    }; 

Tout le monde a utilisé ce qui peut me dire comment tout le monde utilise les autres dans leur projet?

Merci

+0

Ceci est standard JSON, non? Je crois que c'est l'analyseur JSON de référence pour Cocoa/Cocoa Touch: http://code.google.com/p/json-framework/ – Hunter

Répondre

8

Ce que vous voyez dans votre console est un NSLog d'un NSDictionary et non une NSString. De Matt Gemmell MGTwitterEngine Readme:

Les valeurs envoyées à ces méthodes sont tous NSArrays contenant un NSDictionary pour chaque statut ou utilisateur ou message direct, avec des sous-dictionnaires si nécessaire (par exemple, les méthodes de chronologie renvoient généralement les statuts, chaque dont un sous-dictionnaire contient des informations sur l'utilisateur qui a publié ce statut).

Alors quel objet vous avez passé à votre déclaration NSLog() est en fait un dictionnaire et vous pouvez accéder aux champs avec un appel à:

NSString *createdAtDate = [record valueForKey:@"created_at"]; 
NSString *source = [record valueForKey:@"source"]; 
// etc... 

enregistrement est l'objet. Gardez à l'esprit que le champ user est un sous-dictionnaire. Vous y accédez ainsi:

NSDictionary *userDict = [record valueForKey:@"user"]; 
NSString *name = [userDict valueForKey:@"name"]; 
NSString *location = [userDict valueForKey:@"location"]; 
// etc... 

Vous pouvez réellement utiliser la source NSArray retournée dans la demande que des données de votre point de vue de la table, puis extrayez celui que vous avez besoin de l'index dans votre vue de table -cellForRowAtIndexPath délégué.

Cordialement,

+0

Merci Matt. Très bonne réponse.Pouvez-vous me donner un exemple de ce que vous vouliez dire en utilisant NSArray comme source de données de tables et en extrayant ce dont j'avais besoin? – Xcoder

0

Pour toute autre personne qui pourrait trouver leur chemin ici, voici une façon de Parcé les résultats. (D'un débutant, donc ne comptez pas de ce qui est la manière standard ou même correcte)

La clé (jeu de mots: D) est d'utiliser le dictionnaire dans la méthode déléguée appropriée. Consultez l'exemple de code de Matt Long in another thread sur le sujet.

Pour Parcé quelque chose comme ceci:

[myTwitterEngine getSearchResultsForQuery:@"#ironsavior"]; 

Son exemple est-ce, dans la méthode déléguée:

- (void)searchResultsReceived:(NSArray *)searchResults 
        forRequest:(NSString *)connectionIdentifier 
{ 
    if ([searchResults count] > 0) 
    { 
     NSDictionary *result = [searchResults objectAtIndex:0]; 

     NSString *fromUser = [result valueForKey:@"from_user"]; 
     NSString *fromUserID = [result [email protected]"from_user_id"]; 
     // ... 
     NSString *text = [result [email protected]"text"]; 

     NSLog(@"User %@(%@): %@", fromUser, fromUserID, text); 
    } 
} 

Cela vous donne un message très simple qui va « nom d'utilisateur de l'utilisateur (userid) : message". Je ne suis pas sûr de la meilleure façon de procéder, je pense retourner un dictionnaire ou un tableau que vous pourriez utiliser ailleurs dans votre implémentation. Ou simplement retourner le tableau original et l'analyser ailleurs.

Consultez cet autre fil pour plus d'informations.