Изменение альфа-значения объектов в NSArray iOS SDK - PullRequest
0 голосов
/ 01 апреля 2012

ОК, так что я подумал, что это будет довольно просто, но это сбивает меня с толку .. Я уверен, что мне просто не хватает чего-то простого, но вы, ребята, могли бы помочь мне?Я пытаюсь изменить альфа-значения объектов (uiimageviews) в nsarray.До сих пор я получил:

for (int i=1; i < [alphaSet count]; i++) {
   [[alphaSet objectAtIndex:i] setAlpha:masterAlpha];
}

Это просто выбрасывает плохой доступ ... Есть идеи?

Ответы [ 4 ]

1 голос
/ 01 апреля 2012

намного безопаснее и быстрее использовать быстрое перечисление

Вместо этого, если

for (int i = 0; i < [alphaSet count]; i++) {
    // do work
}

Использование

for (UIImageView *imageView in alphaSet) {
    // do work
}

Это исключает вероятность отключения из-за одной ошибки и неправильной инициализации, как в вашем примере.


Для этого примера, поскольку вы делаете только одну вещь, вам вообще не нужно настраивать цикл for, и вместо этого вы можете использовать

[alphaSet setValue:[NSNumber numberWithFloat:masterAlpha] forKey:@"alpha"];
1 голос
/ 01 апреля 2012

Прежде всего, я не уверен, почему вы пропускаете первый индекс. Предполагая, что это ошибка, проверьте ваш код и убедитесь, что он соответствует следующему:

NSArrayDeclaration

NSArray * alphaSet;
//Your code for objects

Декларация masterAlpha

float masterAlpha = 0.5; //Whatever value you have

Альфа-изменение

for (int i = 0; i < [alphaSet count]; i++) {
    UIImageView * imageView = [alphaSet objectAtIndex:i];
    imageView.alpha = masterAlpha;
}
1 голос
/ 01 апреля 2012

Держу пари, что массив пуст. Типичный цикл for из 0 .. [array count] не сможет работать безобидно, но подсчет с index = 1 для пустого массива - это сбой «плохого доступа».

Итак, код, на который нужно обратить внимание, - это код, с помощью которого вы инициализируете alphaSet. Между тем, лучший способ перечислить это так:

for (UIImageView *imageView in alphaSet) {
  imageView.alpha = masterAlpha;
}

Это быстрее, проще для глаз, и никогда не потерпит крах на границах массива. Но вы не получите никакого эффекта в пользовательском интерфейсе, пока не выясните, почему alphaSet пуст.

1 голос
/ 01 апреля 2012

Используйте NSLog, чтобы убедиться, что ваши изображения есть.

for (int i=1; i < [alphaSet count]; i++) {
   NSLog(@"At count %i there is this object: %@", i, [alphaSet objectAtIndex:i]);
   UIImageView *iv = [alphaSet objectAtIndex:i];
   iv.alpha = masterAlpha;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...