Pergunta

Estou tendo problemas com meu app universal.Eu tenho definir a Base do SDK para iPhone 3.2 e definir o destino para 3.1.

Eu movi os arquivos que estão usando o UIPopoverController para seus próprios arquivos e eles não deveriam ser carregado quando carregar o app no iPhone.Ainda assim, quando eu construir a minha aplicação eu recebo o seguinte erro quando eu criar e depurar para o meu dispositivo:

dyld:Símbolo não encontrado:_OBJC_CLASS_$_UIPopoverController Referenciado a partir de:/var/mobile/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/citybikes.app/citybikes Esperado em:/System/Library/Frameworks/UIKit.quadro/UIKit no /var/mobile/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/citybikes.app/citybikes

Eu realmente espero que alguém possa me ajudar.

Melhores cumprimentos, Paulo Peelen

Foi útil?

Solução

Mesmo se eles não são carregados em tempo de execução, os arquivos ainda são transformados em links.O símbolo _OBJC_CLASS_$_UIPopoverController é, portanto, adicionados ao seu aplicativo como um daqueles que precisam de ligação dinâmica.

Existem 2 soluções alternativas,

  1. Substituir toda a aparência do UIPopoverController em uma mensagem (e.g. [UIPopoverController alloc]) com NSClassFromString(@"UIPopoverController"), ou
  2. Fazer UIKit fracamente ligados.

Outras dicas

Eu recomendo fortemente você não Link fracamente o uikit. Como Kennytm e eu mencionamos em nossos comentários, isso pode ocultar problemas futuros do vinculador e resultar em falhas. Também não estou confortável em dizer ao ligante que o UIKIT é opcional quando não é claramente. Big Hack.

Em vez disso, inicialize e ligue para o UipopoverController usando indiretamente o NSCLASSFROMSTRING:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}

Se você ainda tiver erros de ligação, pode ser necessário chamar as mensagens do UipopoverController usando o NSSELECTOREFROMSTRING:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
    self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}

Para a portabilidade, recomendo escrever um objeto de proxy para lidar com esses detalhes da implementação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top