2010-11-29 8 views
1

Je suis nouveau sur ce site, j'espère que vous pouvez aider.développement de l'application ipad: Block_copy ne fonctionne pas

je reçois une erreur de EXC_BAD_ACCESS du code suivant dans la fonction():

typedef int (^BlockDef)(); 
BlockDef getBlockDef(int d) 
{ 
    BlockDef def = Block_copy(^() 
    { 
     return d; 
    }); 

    return def; 
} 

void function() 
{ 
    BlockDef def1 = getBlockDef(1); 
    BlockDef def2 = getBlockDef(2); 

    printf("%d\n",def1()); 
    printf("%d\n",def2()); 

    NSMutableArray * arr = [NSMutableArray array]; 
    [arr addObject:def1]; 
    [arr addObject:def2]; 

    printf("%d\n",((BlockDef) [arr objectAtIndex:0])()); // **** EXC_BAD_ACCESS here 
    printf("%d\n",((BlockDef) [arr objectAtIndex:1])()); 
} 

Ce code fonctionne sans problème dans l'iPhone, mais pas dans ipad. Quel peut être le problème?

De même, dans ipad, lorsque je supprime l'appel Block_copy, il parcourt la même ligne avec succès. C'est bizarre car une fonction non copiée ne devrait pas être retournée ou ne devrait pas être appelée (Dans iphone, j'obtiens un EXC_BAD_ACCESS au premier printf dans cette situation).

Nous vous remercions de votre aide.

Répondre

1

Quand vous dites iPad, voulez-vous dire 3.2? Si c'est le cas, cela ne fonctionnera pas. Il y a une API demi-finie dans 3.2 qui vous permettra de tout faire, sauf les blocs de copie.

Si votre iPad est sur 4.2 et que cela ne fonctionne toujours pas, faites le moi savoir.

+0

sdk est 4.0.2, je n'ai pas de périphérique ipad maintenant (mais je l'aurai demain), j'ai couru ce code en simulateur. La mise à jour vers 4.2 résoudrait-elle ce problème? –

+1

Oui, si vous êtes sur le SDK 4.0 votre sim de l'iPad est 3.2 –

+0

Probablement besoin d'obtenir le SDK 4.2 ainsi que l'iPad. – JeremyP

Questions connexes