Dlatego próbuję zmienić wszystkie wartości logiczne w utworzonej przeze mnie tablicy NSMutableArray, którą śledziłem tutaj. a>
Mam:
@property (nonatomic, retain) NSMutableArray *isDinosaurTapped;
I zsyntetyzowane:
@synthesize isDinosaurTapped;
I skonfiguruj [EDYTOWANO, aby pokazać, że DinosaurTapped]:
NSMutableArray *newDinosaurTaps = [[NSMutableArray alloc] init];
for( int i = 0; i < [dinoSprites count]; i++ )
{
NSNumber *isTapped = [posPlist valueForKeyPath:[NSString stringWithFormat:@"Dinosaurs.Dinosaur_%i.isTapped", i]];
[newDinosaurTaps addObject:isTapped];
}
self.isDinosaurTapped = [newDinosaurTaps copy];
for( int i = 0; i < [isDinosaurTapped count]; i++ )
{
[isDinosaurTapped replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:NO]];
}
Kiedy buduję dobrze, jednak kiedy faktycznie buduję i uruchamiam, ciągle otrzymuję SIGABRT: '-[__NSArrayI replaceObjectAtIndex:withObject:]: nierozpoznany selektor wysyłany do instancji.
Czy niepoprawnie ustawiłem właściwości NSMutableArray? Ale zgodnie z to, moje właściwości powinny być w porządku.
Wszelkie opinie są mile widziane! :D
2 odpowiedzi
Próbujesz zmutować niezmienną tablicę. Czy jest zadeklarowany jako NSMutableArray lub NSArray, a jeśli jest zmienny, czy wywołałeś -copy
lub -mutableCopy
?
W podstawowym fundamencie, NSMutableArrays są wewnętrznie nazywane __NSArrayM (dla zmiennych), a NSArrays są znane jako __NSArrayI (dla niezmiennych).
Narzeka, że wysyłasz selektor replaceObjectAtIndex:withObject: do NSArray, który jest niezmienny/niemodyfikowalny po utworzeniu. NSMutableArray to mutowalna wersja NSArray. Czy zainicjowałeś właściwość isDinosaurTapped za pomocą NSArray? Powinieneś wywołać coś takiego, zanim użyjesz swojej własności.
self.isDinosaurTapped = [NSMutableArray array]; // or another nsmutable creation method.
Jeśli masz NSArray, który chcesz sklonować do swojej usługi, możesz użyć:
self.isDinosaurTapped = [NSMutableArray arrayWithArray:array];
Podobne pytania
Powiązane pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.