1

UITableViewからの文字列で を作成しましたがNSMutableArray、上下にスクロールするとアプリがクラッシュします。もう 1 つの問題は、行を選択するとクラッシュすることNSMutableArrayです。

クラッシュのポイントはコードにコメントされています。

コード:

@synthesize daysArray, activeDaysArray;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        daysArray = [NSMutableArray arrayWithObjects:@"Mondays",@"Tuesday",@"Wednesday",@"Thursday",@"Friday",@"Saturdays", @"Sundays", nil];  
        activeDaysArray = [[NSMutableArray alloc]initWithCapacity:0];
    }
    return self;
}

#pragma Table View Delegates and DataSource methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //This point is OK, it's returning 7 as it is supposed too
    return [daysArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = [daysArray objectAtIndex:indexPath.row]; //Crashing here: EXC_BAD_ACCESS;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell* myCell = [tableView
                                cellForRowAtIndexPath:indexPath];
    if ([myCell accessoryType] == UITableViewCellAccessoryNone) {
        [myCell setAccessoryType:UITableViewCellAccessoryCheckmark];
        [activeDaysArray addObject:indexPath.row]; //Crashing here: EXC_BAD_ACCESS        
    }else{
        [myCell setAccessoryType:UITableViewCellAccessoryNone];
        int indexOfObject = [activeDaysArray indexOfObject:indexPath.row];
        [activeDaysArray removeObjectAtIndex:indexOfObject];
    }
}

よろしく、 クラウディオ

編集済み

myFile.h で:

@property(nonatomic, strong)NSMutableArray *daysArray;
@property(nonatomic, strong)NSMutableArray *activeDaysArray;

私はARCを使用していません!

ビューをスクロールしたときのクラッシュログは次のとおりです。

Last Exception Backtrace:
0   CoreFoundation                  0x2e25ff4e __exceptionPreprocess + 126
1   libobjc.A.dylib                 0x386386aa objc_exception_throw + 34
2   CoreFoundation                  0x2e2638e2 -[NSObject(NSObject) doesNotRecognizeSelector:] + 198
3   CoreFoundation                  0x2e2621ce ___forwarding___ + 702
4   CoreFoundation                  0x2e1b1594 __forwarding_prep_0___ + 20
5   Exame_iPhone                    0x00109dae 0xe9000 + 134574
6   UIKit                           0x30b0347e -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] + 406
7   UIKit                           0x30aab6ca -[UITableView _updateVisibleCellsNow:] + 1650
8   UIKit                           0x30aaaf7c -[UITableView layoutSubviews] + 180
9   UIKit                           0x309d101e -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 342
10  QuartzCore                      0x3065a246 -[CALayer layoutSublayers] + 138
11  QuartzCore                      0x30655a56 CA::Layer::layout_if_needed(CA::Transaction*) + 346
12  QuartzCore                      0x306558e8 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 12
13  QuartzCore                      0x306552fa CA::Context::commit_transaction(CA::Transaction*) + 226
14  QuartzCore                      0x3065510a CA::Transaction::commit() + 310
15  QuartzCore                      0x306a9d80 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 512
16  IOMobileFramebuffer             0x332ce768 IOMobileFramebufferVsyncNotifyFunc + 100
17  IOKit                           0x2ef40d00 IODispatchCalloutFromCFMessage + 244
18  CoreFoundation                  0x2e21fe24 __CFMachPortPerform + 132
19  CoreFoundation                  0x2e22a9e2 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 30
20  CoreFoundation                  0x2e22a97e __CFRunLoopDoSource1 + 342
21  CoreFoundation                  0x2e229152 __CFRunLoopRun + 1394
22  CoreFoundation                  0x2e193ce2 CFRunLoopRunSpecific + 518
23  CoreFoundation                  0x2e193ac6 CFRunLoopRunInMode + 102
24  GraphicsServices                0x32eb427e GSEventRunModal + 134
25  UIKit                           0x30a35a3c UIApplicationMain + 1132
26  Exame_iPhone                    0x000ee920 0xe9000 + 22816
27  libdyld.dylib                   0x38b40ab2 tlv_initializer + 2


Thread 0 Crashed:
0   libsystem_kernel.dylib          0x38bf71fc __pthread_kill + 8
1   libsystem_pthread.dylib         0x38c60a2e pthread_kill + 54
2   libsystem_c.dylib               0x38ba7ff8 abort + 72
3   libc++abi.dylib                 0x37ed6cd2 abort_message + 70
4   libc++abi.dylib                 0x37eef6e0 default_terminate_handler() + 248
5   libobjc.A.dylib                 0x3863891e _objc_terminate() + 190
6   libc++abi.dylib                 0x37eed1c4 std::__terminate(void (*)()) + 76
7   libc++abi.dylib                 0x37eecd28 __cxa_rethrow + 96
8   libobjc.A.dylib                 0x386387f2 objc_exception_rethrow + 38
9   CoreFoundation                  0x2e193d58 CFRunLoopRunSpecific + 636
10  CoreFoundation                  0x2e193ac6 CFRunLoopRunInMode + 102
11  GraphicsServices                0x32eb427e GSEventRunModal + 134
12  UIKit                           0x30a35a3c UIApplicationMain + 1132
13  Exame_iPhone                    0x000ee920 0xe9000 + 22816
14  libdyld.dylib                   0x38b40ab4 start + 0

行を選択したときのクラッシュログは次のとおりです。

Thread 0 Crashed:
0   CoreFoundation                  0x2e18e04c CFRetain + 8
1   CoreFoundation                  0x2e199c42 -[__NSArrayM insertObject:atIndex:] + 502
2   Exame_iPhone                    0x00099554 -[CreateAlarmViewController tableView:didSelectRowAtIndexPath:] (CreateAlarmViewController.m:117)
3   UIKit                           0x30aee326 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1074
4   UIKit                           0x30ba124e -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 210
5   UIKit                           0x30a5196e _applyBlockToCFArrayCopiedToStack + 314
6   UIKit                           0x309c946e _afterCACommitHandler + 426
7   CoreFoundation                  0x2e22b1d2 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
8   CoreFoundation                  0x2e228b74 __CFRunLoopDoObservers + 280
9   CoreFoundation                  0x2e228eb6 __CFRunLoopRun + 726
10  CoreFoundation                  0x2e193ce2 CFRunLoopRunSpecific + 518
11  CoreFoundation                  0x2e193ac6 CFRunLoopRunInMode + 102
12  GraphicsServices                0x32eb427e GSEventRunModal + 134
13  UIKit                           0x30a35a3c UIApplicationMain + 1132
14  Exame_iPhone                    0x0007def0 main (main.m:14)
15  libdyld.dylib                   0x38b40ab4 start + 0
4

2 に答える 2

1

self.daysArray問題 1:およびとして配列にアクセスする必要がありますself.activeDaysArray

問題 2:どちらがプリミティブ型 ( ) で型ではないかindexPath.rowを返しNSUIntegerます。unsigned longid

通常、これを試すとXcodeは警告を出します

Incompatible integer to pointer conversion sending 'NSUInteger' (aka 'unsigned int') to parameter of type 'id'

配列に挿入するには、次のようにします。

NSNumber *row = [NSNumber numberWithInt:indexPath.row];
self.activeDaysArray addObject:row];

配列内のオブジェクトをチェックする際も同じようにしてください。

それが役立つことを願っています!

于 2013-10-23T12:33:25.970 に答える