Então, eu estava criando um leitor de RSS para a minha escola e terminei o código. Fiz o teste e me deu esse erro. Aqui está o código ao qual está se referindo:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
if (cell == nil) {
cell =
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
aqui está o erro na saída:
2012-10-04 20: 13: 05.356 Reader [4390: c07] * Falha de asserção em - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20: 13: 05.357 Reader [4390: c07] * Aplicativo de encerramento devido à exceção não capturada 'NSInternalInconsistencyException', motivo: 'não é possível retirar a fila de uma célula com identificador Cell - deve registrar uma ponta ou uma classe para o identificador ou conectar uma célula de protótipo em um storyboard ' * Primeiro pilha de chamadas lance: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib: terminado chamado lançando uma exceção
e aqui está o código que mostra na tela de erro:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
por favor ajude!
fonte
Respostas:
Você está usando o
dequeueReusableCellWithIdentifier:forIndexPath:
método A documentação para esse método diz o seguinte:Você não registrou uma ponta ou uma classe para o identificador de reutilização
"Cell"
.Olhando para o seu código, você espera que o método dequeue retorne
nil
se ele não tiver uma célula para fornecer. Você precisa usar odequeueReusableCellWithIdentifier:
para esse comportamento:Observe que
dequeueReusableCellWithIdentifier:
edequeueReusableCellWithIdentifier:forIndexPath:
são métodos diferentes. Veja doc para o primeiro e o segundo .Se você quiser entender por que deseja usar
dequeueReusableCellWithIdentifier:forIndexPath:
, consulte estas perguntas e respostas .fonte
dequeueReusableCellWithIdentifer:forIndexPath:
(introduzido no iOS6) é uma melhoria agradável, pois você não precisa verificar se a célula é nula. (UITableViewController
Funciona de maneira semelhante aUICollectionView
) Mas é irritante que essa alteração não seja comentada no modelo e que a mensagem de afirmação / falha não seja mais útil.dequeueReusableCellWithIdentifier:forIndexPath:
quando deveria estar usandodequeueReusableCellWithIdentifier:
.Acho que esse erro é sobre registrar sua ponta ou classe para o identificador.
Para que você possa manter o que está fazendo na função tableView: cellForRowAtIndexPath e apenas adicionar o código abaixo em seu viewDidLoad:
Funcionou para mim. Espero que ajude.
fonte
viewDidLoad
e movendo essa lógica paraviewDidAppear
corrigi-la.Embora essa pergunta seja bastante antiga, há outra possibilidade: se você estiver usando Storyboards, basta definir o CellIdentifier no Storyboard.
Portanto, se o seu CellIdentifier for "Cell", basta definir a propriedade "Identifier":
Certifique-se de limpar sua compilação depois de fazer isso. O XCode às vezes tem alguns problemas com as atualizações do Storyboard
fonte
Identifier
propriedade. Obrigado!eu tive o mesmo problema ao substituir por
resolvido
fonte
O problema é mais provável porque você configura o
UITableViewCell
storyboard personalizado , mas não usa o storyboard para instanciar oUITableViewController
que usa issoUITableViewCell
. Por exemplo, no MainStoryboard, você tem umaUITableViewController
subclasse chamadaMyTableViewController
e uma dinâmica personalizadaUITableViewCell
chamadaMyTableViewCell
com o identificador "MyCell".Se você criar seu costume
UITableViewController
assim:Ele não registrará automaticamente sua célula de tableview personalizada para você. Você precisa registrá-lo manualmente.
Mas se você usar o storyboard para instanciar
MyTableViewController
, assim:Coisa boa acontece!
UITableViewController
registrará automaticamente sua célula de tableview personalizada que você definir no storyboard para você.No método delegado "cellForRowAtIndexPath", você pode criar sua célula de exibição de tabela assim:
dequeueReusableCellWithIdentifier criará automaticamente uma nova célula para você, se não houver uma célula reutilizável disponível na fila de reciclagem.
Então você está pronto!
fonte
instantiateViewControllerWithIdentifier
para iniciar meu viewController salvou meu dia!Vou acrescentar que o Xcode 4.5 inclui o novo
dequeueReusableCellWithIdentifier:forIndexPath:
em seu código de modelo padrão - uma possibilidade potencial para desenvolvedores que esperam o
dequeueReusableCellWithIdentifier:
método mais antigo .fonte
No seu storyboard, você deve definir o 'Identificador' da sua célula protótipo para ser o mesmo que o seu CellReuseIdentifier "Cell". Então você não receberá essa mensagem ou precisará chamar essa função registerClass:.
fonte
Solução Swift 2.0:
Você precisa acessar o Inspetor de Atributos e adicionar um nome para o identificador de suas células:
Então você precisa fazer o seu identificador corresponder à sua desenfileiramento da seguinte forma:
alternativamente
Se você estiver trabalhando com uma ponta, talvez seja necessário registrar sua classe em seu cellForRowAtIndexPath:
A referência de classe UITableView da Apple diz:
Aqui está o código da estrutura do Apples Swift 2.0:
fonte
SwitchCell.self
vem?UITableViewCell.self
parece funcionar para mim. Talvez adicionar uma nota na respostaSe você usar células estáticas personalizadas, apenas comente este método:
e forneça às células um identificador no "Attributes Inspector" no storyboard.
fonte
Dou-lhe a resposta no Objetivo C e no Swift. Antes disso, quero dizer
Então nós adicionamos
registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:
no método viewDidLoad, devemos registrar a célula
Objetivo C
OPÇÃO 1:
OPÇÃO 2:
no código acima,
nibWithNibName:@"CustomCell"
forneça seu nome de ponta em vez do meu nome de ponta CustomCellRÁPIDO
OPÇÃO 1:
OPÇÃO 2:
no código acima,
nibName:"NameInput"
dê seu nome de pontafonte
Trabalhando com o Swift 3.0:
fonte
Passei horas na noite passada tentando descobrir por que minha tabela gerada programaticamente caiu em [myTable setDataSource: self]; Foi bom comentar e exibir uma tabela vazia, mas travou toda vez que tentei acessar a fonte de dados;
Eu tinha a delegação configurada no arquivo h: @interface myViewController: UIViewController
Eu tinha o código fonte de dados na minha implementação e ainda o BOOM !, sempre travava! OBRIGADO por "xxd" (nº 9): adicionar essa linha de código resolveu isso para mim! Na verdade, estou lançando uma tabela a partir de um botão IBAction, então aqui está o meu código completo:
A propósito: o botão deve estar vinculado como um IBAction e como um IBOutlet se você deseja ancorar o popover nele.
UIPopoverController * popoverController3 é declarado no arquivo H diretamente após @interface entre {}
fonte
FWIW, recebi esse mesmo erro quando esqueci de definir o identificador de célula no storyboard. Se esse for o seu problema, no storyboard, clique na célula da exibição de tabela e defina o identificador da célula no editor de atributos. Verifique se o identificador de célula que você define aqui é o mesmo que
fonte
Eu tive o mesmo problema, estava tendo o mesmo erro e, para mim, funcionou assim:
Talvez seja útil para outra pessoa.
fonte
Configurei tudo corretamente no Storyboard e fiz uma compilação limpa, mas continuei recebendo o erro " deve registrar uma ponta ou uma classe para o identificador ou conectar uma célula protótipo em um storyboard "
Corrigido o erro, mas ainda estou perdido. Não estou usando uma 'célula personalizada', apenas uma exibição com uma exibição de tabela incorporada. Declarei o viewcontroller como delegado e fonte de dados e verifiquei se o identificador de célula corresponde no arquivo. O que está acontecendo aqui?
fonte
Isso pode parecer estúpido para algumas pessoas, mas me pegou. Eu estava recebendo esse erro e o problema para mim era que estava tentando usar células estáticas, mas adicionava mais coisas dinamicamente. Se você está chamando esse método, suas células precisam ser protótipos dinâmicos. Selecione a célula no storyboard e, no inspetor Atributos, a primeira coisa que diz 'Conteúdo' e você deve selecionar protótipos dinâmicos não estáticos.
fonte
Apenas um complemento das respostas: pode haver um tempo em que você ajusta tudo, mas acidentalmente pode adicionar outras UIs em você
.xib
, comoUIButton
: Apenas exclua a UI extra, ela funciona.fonte
Certifique-se de que o CellIdentifier == identificador da célula em um storyboard, os dois nomes sejam iguais. Espero que isso funcione para você
fonte
No meu caso, o acidente aconteceu quando liguei
deselectRowAtIndexPath:
A linha era
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Mudando para
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
FIXO MEU PROBLEMA!Espero que isso ajude alguém
fonte
Em Swift, esse problema pode ser resolvido adicionando o código a seguir no seu
método.
fonte
Deparamos com esse erro O identificador de reutilização da célula bc estava errado - um erro de novato, mas acontece: 1. Faz com que o identificador de reutilização da célula SURE não tenha erros de ortografia ou letras ausentes. 2. Na mesma linha, não esqueça a contagem de letras maiúsculas. 3. Zeros não são "O" s (Ohs)
fonte