UIButton в UITableViewCell падает при нажатии - PullRequest
1 голос
/ 09 марта 2011

Это должно быть просто, но я не могу понять, что не так. Я создаю табличное представление, и я хочу нажать кнопку, чтобы переключаться между проверенным и непроверенным:

    UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:DiaperCellIdentifier];

if (cell == nil)
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier:DiaperCellIdentifier] autorelease];
        wetButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
        image = [UIImage imageNamed:@"unchecked_large.png"];
        CGRect frame = CGRectMake(150.0, 5.0, image.size.width, image.size.height);
        wetButton.frame = frame;
        [wetButton setBackgroundImage:image forState:UIControlStateNormal]; 
        [wetButton addTarget:self action:@selector(wetClicked:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:wetButton];

Теперь, когда я нажимаю эту кнопку, я получаю трассировку стека .... [NSCFString scale]: нераспознанный селектор отправлен в экземпляр .... спасибо за любую помощь.

- (void) wetClicked:(id)sender{
if (isWet) {
    isWet = NO;
    [wetButton setBackgroundImage:@"unchecked_large.png" forState:UIControlStateNormal];
} else {
    isWet = YES;
    [wetButton setBackgroundImage:@"checked_large.png" forState:UIControlStateNormal];
}

}

и вот след:

2011-03-09 10: 19: 57.124 InfantCare [64064: 207] - [NSCFString scale]: нераспознанный селектор отправлен на экземпляр 0x33be0

2011-03-09 10: 19: 57.240 InfantCare [64064: 207] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSCFString scale]: нераспознанный селектор отправлен в экземпляр 0x33be0'

* стек вызовов при первом броске:

(* * тысяча двадцать-один

0   CoreFoundation                      0x00f2dbe9 __exceptionPreprocess + 185

1   libobjc.A.dylib                     0x010825c2 objc_exception_throw + 47

2   CoreFoundation                      0x00f2f6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187

3   CoreFoundation                      0x00e9f366 ___forwarding___ + 966

4   CoreFoundation                      0x00e9ef22 _CF_forwarding_prep_0 + 50

5   UIKit                               0x003d1e7b -[UIImageView setImage:] + 250

6   UIKit                               0x004ea353 -[UIButton layoutSubviews] + 273

7   QuartzCore                          0x01d58451 -[CALayer layoutSublayers] + 181

8   QuartzCore                          0x01d5817c CALayerLayoutIfNeeded + 220

9   QuartzCore                          0x01d5137c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310

10  QuartzCore                          0x01d510d0 _ZN2CA11Transaction6commitEv + 292

11  QuartzCore                          0x01d817d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99

12  CoreFoundation                      0x00f0efbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27

13  CoreFoundation                      0x00ea40e7 __CFRunLoopDoObservers + 295

14  CoreFoundation                      0x00e6cbd7 __CFRunLoopRun + 1575

15  CoreFoundation                      0x00e6c240 CFRunLoopRunSpecific + 208

16  CoreFoundation                      0x00e6c161 CFRunLoopRunInMode + 97

17  GraphicsServices                    0x017cf268 GSEventRunModal + 217

18  GraphicsServices                    0x017cf32d GSEventRun + 115

19  UIKit                               0x0031642e UIApplicationMain + 1160

20  InfantCare                          0x00002228 main + 102

21  InfantCare                          0x000021b9 start + 53

)

завершить вызов после выброса экземпляра 'NSException'

Программа получила сигнал: «SIGABRT».

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

Я думаю, вам нужно использовать экземпляр UIImage в качестве параметра при вызове функции setBackgroundImage:

[wetButton setBackgroundImage:@"unchecked_large.png" forState:UIControlStateNormal]; 

используйте вместо:

[wetButton setBackgroundImage:[UIImage imageNamed:@"unchecked_large.png"] forState:UIControlStateNormal];
2 голосов
/ 09 марта 2011

Код, который вы опубликовали, в порядке Скорее всего, проблема в вашем методе wetClicked:, вы вызываете метод scale для строки NSString.


Теперь, когда вы опубликовали wetClicked: и трассировку, я вижу проблему: вы передаете строку вместо изображения setBackgroundImage:forState:. Попробуйте вместо этого:

- (void) wetClicked:(id)sender{
    if (isWet) {
        isWet = NO;
        [wetButton setBackgroundImage:[UIImage imageNamed:@"unchecked_large.png"] forState:UIControlStateNormal];
    } else {
        isWet = YES;
        [wetButton setBackgroundImage:[UIImage imageNamed:@"checked_large.png"] forState:UIControlStateNormal];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...