Aviso do storyboard: as células da tabela de protótipo devem ter identificadores de reutilização

123

Estou recebendo esse aviso do storyboard - as células da tabela de protótipo devem ter identificadores de reutilização.

Renomeei o identificador no inspetor de atributos, mas ele não parece ter removido o aviso.

Alguma sugestão?

K.Honda
fonte
Você preencheu o campo errado ou tem mais de uma exibição de tabela. Você pode postar uma captura de tela do inspetor de atributos?
Jrturton 21/03/12
3
Está tudo bem agora companheiro. Eu encontrei uma solução. O valor para o identificador deve ser o mesmo que o identificador de reutilização. :)
K.Honda
Você definiu um identificador para cada célula?
Mick MacCallum
Oi Honda! Poderia me dizer o que fez porque estou recebendo o mesmo erro.
Varun Mehta
2
Percebi que algumas vezes (atualmente usando o Xcode 5 Beta 5 mais recente (5B103i)) destaca locais errados do erro / aviso no storyboard. Portanto, se você clicar no aviso, ele às vezes mostrará o local errado, onde um aviso semelhante já pode ser corrigido. Sugiro que você passe manualmente por qualquer uma das visualizações que você tem no storyboard e verifique se há outras células com o identificador ausente. Acima resolveu meu problema com este aviso. Obrigado @ K.Honda por fazer a pergunta, pois este tópico me ajudou a entender como corrigir o problema.
Justas 01/03

Respostas:

159

Para desligar o aviso, você deve dar um nome ao identificador da célula:

insira a descrição da imagem aqui

aleroot
fonte
14
feliz para mim. perto xcode - abri-lo e, em seguida, alterar o identificador
Idan Magled
7
Quando o aviso mantém-se meios que em algum lugar em sua StoryBoard ainda há uma célula sem identificador
saimonx
Se você tiver mais de 1 células protótipo, você deve dar-lhes toda uma indetifier, senão apenas definir o número a uma na célula protótipo
user1700737
6
Eu tive que excluir a pasta Derived Data (equivalente ao Xcode de uma reinicialização do Windows) e reconstruir para me livrar desse aviso falso.
Michael McGuire
Isso funcionou para mim: feche o Xcode, abra / Usuários / nome de usuário / Biblioteca / Desenvolvedor / Xcode / DerivedData no Finder e exclua todo o seu conteúdo (não a própria pasta DerivedData).
dldnh
18

Outra maneira é definir a propriedade 'Células protótipo' da exibição de tabela como zero no Inspetor de atributos, se você estiver definindo a célula usando um .xib programaticamente.

Configurando células de protótipo para 0 no Inspetor de atributos

bitsand
fonte
9

Como o storyboard é na verdade um arquivo XML, outro truque é abrir seu storyboard com qualquer editor de texto (não o Xcode!) E tentar encontrar todos os nós tableViewCell. Por exemplo, pressione CMD + F , digite <tableViewCell contentMode="scaleToFill"e pressione Enter. Você provavelmente descobrirá, as linhas iguais a esta:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Preste atenção no reuseIdentifier="GenericCellID"valor-chave. As linhas que acionam o aviso (sem identificadores de reutilização) não terão esse valor de chave. Olhe os nós acima no seu editor de texto e você verá um tableViewControllernó com o nome da classe que você precisa verificar no editor de storyboard do Xcode e corrigir, de acordo com a resposta da aleroot.

Dmitry Varavkin
fonte
1
Você pode realmente abrir seu storyboard como código com o Xcode fazendo um CTRL + clique no seu arquivo de storyboard Open As>>Source Code
NSTJ
4

Se o seu aviso do Xcode ainda não desaparecer, mesmo depois de definir o reuseIdentifier, tente o Menu "Produto -> Limpar". Isso me ajudou e, depois disso, o aviso não apareceu mais.

Marcel Wassmer
fonte
2

Como clicar duas vezes nesse aviso pode levar a uma espécie de arrepio (o UITableViewCell específico não é selecionado), você só quer acrescentar que, embora alguns desses avisos sejam resolvidos automaticamente, outros não .

Se você tiver certeza de que marcou todas as suas células no Storyboard, reconstrua o projeto - seu aviso pode desaparecer (como o meu).

Sitric
fonte
2

A hay mary: reiniciar o XCode funcionou para mim (mas provavelmente foi apenas uma reconstrução manual necessária).

Hannele
fonte
1

Recebi este aviso para o Xcode 7. Estou trabalhando com o Swift. Não adicionei o controlador de navegação para o controlador de exibição inicial. Quando o fiz .. recebi este aviso do StoryBoard. O que eu fiz é:

  1. Existem dois segues
    1. do Navigation Controller para Root view Controller e
    2. do controlador Root View para o seu controlador View inicial.
  2. Selecione as etapas que conectam o controlador de visualização raiz ao controlador de visualização inicial.
  3. Nomeie o identificador
  4. Selecione a parte escrita "Prototype" do controlador -> lá você verá o identificador como uma opção.
  5. Cole o mesmo nome do identificador digitado anteriormente.

O aviso vai .. se não limpar o sdk :)

Mili
fonte
1

Certifique-se de estar configurando o identificador de reutilização no objeto, em vez do ID de restauração . Ambos estão disponíveis no storyboard e são facilmente confundidos.

No arquivo XML do storyboard, você desejará definir reuseIdentifier, não restorationIdentifier.

pkamb
fonte
0

Percebi que esse erro ocorre quando você tem várias células de protótipo (nas propriedades tableview) e não forneceu todos eles para reutilizar identificadores.

Tjalsma
fonte
Também já vi isso, existe uma maneira de nomear todas as células de uma só vez ou existe outra maneira de remover esses avisos?
precisa saber é o seguinte
1
Cada célula Prototye precisa de seu próprio nome. Portanto, não há maneira de fazê-lo automaticamente
Vincent
0

O identificador é o nome ao qual você se refere no arquivo .m. Quando não está cheio, não é possível fazer referência à célula.

Vincent
fonte
0

Isso para definir o identificador de reutilização programaticamente

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
Mukesh
fonte