2012-11-17 2 views
1

Ce que j'essaie de faire actuellement est essentiellement j'ai 2 applications et basé sur si l'autre est installé ou non, se comporter d'une certaine manière. Je suis venu sur Pasteboard pour la communication inter-app, alors j'ai pensé que je devrais utiliser ceux-ci. Eh bien est le problème ici, les deux applications font quelque chose comme çaComment obtenir des données dans iOS carton d'accueil pour rester à accès multiple

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.company.app.key" create:YES]; 
[pasteboard setPersistent:YES]; 
NSData *data = [pasteboard dataForPasteboardType:@"com.company.otherapp"]; 
if(data != nil) 
{ 
    // Do stuff 
} 
NSData *selfKey = [pasteboard dataForPasteboardType:@"com.company.thisapp"]; 
if(data == nil) 
{ 
    [pasteboard setValue:@"string" forPasteboardType:@"com.company.thisapp"]; 
} 

J'installé une application et a couru l'autre, et la première fois qu'il a travaillé, des données n'a pas été nulle, et si je converti le NSData à NSString En utilisant l'initialiseur NSString avec NSData, je lis "string". Le problème est que tout ce que je fais est de fermer la deuxième application, l'exécuter à nouveau et soudainement les données sont nulles. Je crus d'abord que, après je y accéder, la table de montage supprime tout, donc j'ai ajouté la ligne suivante dans // Faire des trucs

[pasteboard [email protected]"string" forPasteboardType:@"com.company.otherapp"]; 

données est toujours nil Non si je lance l'application la deuxième fois. J'ai besoin de la chaîne pour rester dans le Pasteboard pour toujours puisque c'est tout ce que j'ai à me dire si mon autre application est installée ou pas, donc quelqu'un a-t-il des idées pour lesquelles les données retournent nil seulement après 1 course?

Je dois souligner que tout ce que je fais est en appuyant sur le bouton d'accueil, puis de lancer l'application à nouveau, La situation est

-Exécuter APP1

-Exécuter App2 (récupère les données de Pasteboard)

bouton Accueil -appuyer

Répondre

1

Je compris pourquoi App2 ne pouvait le voir à nouveau. Ce que setValue: forPasteboardType fait est qu'il écrase le premier élément dans le tableau de données. Donc, chaque fois que j'utilisais mes applications, elles écrasaient la clé de l'autre dans le carton.

La solution utilise l'élément de la table de montage multiple de la classe pour rechercher l'index du type pasteboard et obtenir des données à partir de cet élément.

1

-Exécuter App2 (données nil) Lorsque vous chargez votre table de montage, vous devriez le définir comme étant persistant. Après la première ligne dans votre code ci-dessus, ajoutez:

pasteboard.persistent = YES; 
+0

oh oui, j'ai oublié d'ajouter ça, je le mets à persistant, je vais le modifier. – user1289479

Questions connexes