2012-10-26 22 views
7

Sto tentando di aggiungere la nuova funzionalità di condivisione di iOS 6 alla mia app utilizzando UIActivityViewController. Ho del testo che voglio condividere e se scelgono Email voglio impostare automaticamente anche l'oggetto dell'email.UIActivityViewController che si arresta in modo anomalo, NSCFConstantString _beforeActivity selettore non riconosciuto inviato all'istanza

NSArray *activityItems = @[resultString]; 
NSLog(@"items=%@", activityItems); 

NSArray *acitivities = @[UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypePostToFacebook, UIActivityTypeCopyToPasteboard]; 

UIActivityViewController *activityController = 
    [[UIActivityViewController alloc] initWithActivityItems:activityItems 
             applicationActivities:activities]; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    self.popover = [[UIPopoverController alloc] initWithContentViewController:activityController]; 
    // the line above is where the error happens. 
    [self.popover presentPopoverFromBarButtonItem:self.emailResultsButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} else { 
    [self presentViewController:activityController 
         animated:YES 
        completion:nil]; 
} 

Ecco l'output del codice incluso il messaggio di errore:

[694:907] items=(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas porttitor accumsan mi eu mollis. Fusce condimentum dictum lectus, eu ultrices urna vulputate eu." 
) 
[694:907] -[__NSCFConstantString _beforeActivity]: unrecognized selector sent to instance 0x3ad971c8 
[694:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString _beforeActivity]: unrecognized selector sent to instance 0x3ad971c8' 
*** First throw call stack: 
(0x35add2a3 0x37a1497f 0x35ae0e07 0x35adf531 0x35a36f68 0x361dc7a3 0x361dc52d 0x36067595 0x36434d31 0x3642fe07 0x2990b 0x361330ad 0x36133135 0x361330ad 0x3613305f 0x3613303d 0x361328f3 0x36132de9 0x3605b5f9 0x36048809 0x36048123 0x37bd15a3 0x37bd11d3 0x35ab2173 0x35ab2117 0x35ab0f99 0x35a23ebd 0x35a23d49 0x37bd02eb 0x3609c301 0x1ef9d 0x1ef30) 
libc++abi.dylib: terminate called throwing an exception 

Io corro questo su un iPad 2 con iOS6. Qualche idea?

MODIFICA: Sembra che se non fornisco l'array di attività, tutto sembra funzionare correttamente. Ancora restringendo il problema.

+0

Il problema persiste se si spegne ARC? (Prevedo di sì) –

+0

Spegnere ARC non è come lanciare un interruttore ... ma ho continuato a giocare. Sembra che il problema scompaia quando non fornisco l'array delle attività. –

+0

bene, basta disattivare temporaneamente il flag del compilatore. Non preoccuparti delle perdite di memoria. –

risposta

16

L'eccezione dice tutto: si sta passando a un array di stringhe :

NSArray *acitivities = @[UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypePostToFacebook, UIActivityTypeCopyToPasteboard]; 

La documentazione dice che il metodo si aspetta una lista di oggetti UIActivity:

applicationActivities

Un array di oggetti UIActivity che rappresentano i servizi personalizzati supportati dall'applicazione. Questo parametro potrebbe essere nullo.

Nota che questo è per personalizzato attività; per esempio. se vuoi offrire la tua integrazione DropBox in aggiunta ai servizi esistenti.

EDIT: Per quanto riguarda l'attività tipi, che appaiono solo per essere utilizzato in UIActivity.activityType, UIActivityItemProvider.activityType, UIActivityViewController.excludedActivityTypes e -[UIActivityItemSource activityViewController:itemForActivityType:].

+0

Aaaa e abbiamo un vincitore qui! +1. –

+0

Grazie, era così. Ora devo capire perché Facebook non compare nell'elenco. Forse non sono collegato a Facebook su questo dispositivo. –

+4

Vorrei che ObjC avesse digitato gli array in modo da non avere questo problema. NSArray avrebbe evitato tutto questo. –

Problemi correlati