Pergunta

Eu tenho um NSMutableArray chamado organizações o que é uma matriz de objetos personalizados de uma classe de uma subclasse de NSObject, essa subclasse é chamado de NSXOrganisation.Esta subclasse NÃO implementar NSCopy assim:

@interface NSXOrganisation : NSObject <NSCopying>

...

- (id)copyWithZone:(NSZone *)zone
{
    id copy = [[[self class] alloc] init];

    if (copy) 
    {
        [copy setPropertyOne:[[[self getPropertyOne] copyWithZone:zone] autorelease]];           
    }

    return copy;
}

Agora, eu alocação & init a matriz assim:

organisations = [[NSMutableArray alloc] initWithArray:organisationsArray copyItems:YES];

Isso tudo funciona muito bem.Para fins de teste a matriz tem 2 objetos.

Em seguida, quando um método é chamado, eu atualizar um objeto no array da seguinte forma:

- (void)updateOrganisation
{
    [[organisations objectAtIndex:0] setConsumerKey:[tfPropertyOne stringValue]];
}

Onde tfPropertyOne* é um NSTextField no visor (ligados correctamente, etc.).Isso também funciona muito bem, como eu testei com NSLog e ele produz o resultado correto.Eu, em seguida, chamar um método de exibição em um diferente índice da matriz para exibir seus detalhes relevantes:

- (void)displayOrganisation:
{
    [tfPropertyOne setStringValue:[[organisations objectAtIndex:index] getPropertyOne]];
}

índice de é um local NSInteger e não é o problema.Eu, em seguida, chamar o mesmo método de atualização sobre este objeto, o que, aparentemente, funciona bem também (usando NSLog para testar).

Finalmente, quando faço uma chamada para ir e voltar a exibir o primeiro objeto na matriz [auto displayOrganisation:0] a chamada funciona com êxito, mas o meu aplicativo falha ao chamar getPropertyOne.

Este é o erro no Mac do Console:

...: Invalid memory access of location 0x3bcfd069 eip=0x90c1cd5c

E este é o relatório de falha:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x90c1cd4b objc_msgSend + 27
1   com.apple.Foundation            0x943da945 _NSDescriptionWithLocaleFunc + 57
2   com.apple.CoreFoundation        0x906503ae __CFStringAppendFormatCore + 12238
3   com.apple.CoreFoundation        0x906a70dc _CFStringCreateWithFormatAndArgumentsAux + 108
4   com.apple.CoreFoundation        0x9072821c _CFLogvEx + 124
5   com.apple.Foundation            0x9445d221 NSLogv + 136
6   com.apple.Foundation            0x9445d194 NSLog + 27
7   co.nz.fdl.XeroConnect           0x1b5b4872 -[PrefsController displayOrganisation:] + 194 (PrefsController.mm:229)

Alguém pode me ajudar?Estou acessar / criar / guardar os objetos para a matriz incorretamente?

Foi útil?

Solução 2

Eu consegui corrigir este problema alterando o meu arquivo de cabeçalho para o objeto personalizado.

Original:

@property (nonatomic, retain) NSString *propertyOne;

De trabalho:

@property (copy) NSString *propertyOne;

Toda esta questão foi, em geral, à minha falta de objective-C de conhecimento (daí por que eu ainda estou aprendendo!).Valeu galera

Outras dicas

Parece que você está tentando acessar um objeto que já tenha sido lançado.Verifique a sua autorelease chamadas.

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