Tengo este error sucede en Xcode:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString _isDecompressing]: unrecognized selector sent to instance 0x71863b0'

Tengo un poco de código y clases, así que no sé lo que tendría que ser enviado a empezar a buscar en este tema. Si alguien me podría dar alguna orientación sobre cómo empezar a arreglar esto, sería muy apreciado. p.s. si hay algo que necesita ser publicado dime y voy a editar.

  • Se puede encontrar la línea donde la excepción es la de ser lanzado? Pruebe a establecer una Excepción en el punto de interrupción – ir a los puntos de corte de la lista y pulse la tecla + en la parte inferior.
  • En primer lugar, analice su aplicación para «descomprimir» en un selector o nombre de la propiedad — en algún lugar de una cadena que se pasa de un lugar del objeto correspondiente. A continuación, establezca la excepción de punto de interrupción, como se describe anteriormente, y/o agregar una excepción de rastreo a su main.
  • el uso de las excepciones de punto de interrupción me permitió acotar la búsqueda y encontrar donde era el problema. Esto me llevó a una solución. Mi problema era que yo estaba ahorrando un NSString (un archivo) como un UIImage. Yo había olvidar la parte de la línea «[UIImage imageWithContentsOfFile:NSString]» para cargar la imagen en el archivo.
InformationsquelleAutor Hoodai | 2013-06-27

3 Comentarios

  1. 4

    Cuando usted tiene unrecognized selector send to instance error, usted tiene que comprobar si se ha declarado y se implementó el método que es señalado por el error, en su caso _isDecompressing. Si todo está bien en su clase (el método es declarado e implementado), a continuación, echar un vistazo a la clase de tipo que es la llamada al método, en su caso NSString la mayoría del tiempo de la clase que está mal.

    Con el fin de señalar el problema, usted está tratando de llamar a un método _isDecompressing en NSString que no existe. Así que asegúrese de que cada objeto que llama a este método es de su tipo deseado y no NSString

    Una buena manera de encontrar la línea que está causando el bloqueo es permitir excepciones breackpoints.

    • Mejor respuesta b/c de la última línea de «Una buena manera de encontrar la línea que está causando el bloqueo es permitir excepciones breackpoints.» Una solución Real en los comentarios de la pregunta
  2. 1

    La causa más probable de este accidente es que usted está enviando un mensaje a una cancela la asignación de instancia de un objeto – probar el funcionamiento de su aplicación con NSZomie activado – ver, por ejemplo, ¿Cómo puedo configurar NSZombieEnabled en Xcode 4?

    Lo que está pasando es que la memoria utilizada por el objeto queda marcada como no utilizados cuando se cancela la asignación y algún otro objeto se asigna en ese lugar. Este objeto, sin embargo, es de una clase diferente, de ahí el no reconocer selector de mensaje.

    Como se señaló en los comentarios, la forma de envío de los mensajes se cancela la asignación de casos se manifiesta varía:

    Se asigna el objeto en algún lugar de la memoria – en una página, la cual está dividida en dos partes por un asignador – por ejemplo, malloc. Si el subyacente asignador ya volvió la página donde el objeto era el kernel, a continuación, la aplicación se bloqueará con ningún registro (EXC_BAD_ACCESS).

    Si el objeto fue lanzado y conservar el conteo llegue a 0 se cancela la asignación, es decir el marcado de la memoria en la página como libre para uso futuro. Si por lo tanto intenta enviar otro mensaje a ese objeto, el tiempo de ejecución se dará cuenta de que el objeto no tiene conservar contar, por tanto, se cancela la asignación y el caso de la message sent to deallocated instance excepción.

    Si, sin embargo, la memoria de que su objeto inicial ocupada fue tomada por otro objeto en el medio, no hay manera de que el tiempo de ejecución de saber que hubo una vez que un objeto tiene intención de llamar a un método, por lo tanto el unrecognized selector excepción, ya que la clase a la cual pertenece el objeto es parte de la estructura del objeto – el isa puntero. Nada más es (o puede ser) controlado por el tiempo de ejecución. Para el tiempo de ejecución, es una solicitud válida para enviar un mensaje a un objeto, sin embargo, no existe ningún método en el nuevo objeto.

    Esto puede ser potencialmente peligroso si el nuevo objeto responde a la misma el mensaje de que hace algo letal en una clase, puesto que el método se llama en realidad sobre el objeto si se trata de un método válido nombre!

    Por supuesto, hay otros escenarios, por ejemplo, el objeto sobrescritos por otros datos, por tanto el isa puntero apunta a un inexistente clase y se produzca un accidente tal como en el primer lugar, desde el sistema operativo se va a tratar para eliminar una dirección que no es válido en el contexto de su proceso.

    • Cuando se llama a un método en un desasignado objeto de obtener message sent to deallocated instance no unrecognized selector. Y ¿sabía usted de un NSString metodología llamado _isDecompressing ? :))
    • Que no es del todo cierto. Esto depende de varias cosas – si el subyacente asignador (generalmente malloc) ya se devuelve la página donde el objeto era el kernel, a continuación, la aplicación se bloqueará con ningún registro (EXC_BAD_ACCESS). Si usted simplemente suelte el objeto y se cancela la asignación, otro mensaje enviado a ese objeto hará que el message sent to deallocated instance. Sin embargo, si la memoria que su objeto inicial ocupada fue tomada por otro objeto, no hay manera de que el tiempo de ejecución de saber que hubo una vez que un objeto tiene intención de llamar a un método, por lo tanto el unrecognized selector excepción.
  3. 0

    En el depurador de la consola, el uso de ‘bt’ para obtener una traza, a continuación, desmontar la primera dirección en la traza de la es notablemente más pequeño que el resto de los valores… los pequeños valores de las direcciones de su código.

Dejar respuesta

Please enter your comment!
Please enter your name here