1

辞書値の配列から UItableview にいくつかの値をロードしています。次に、以下のようにキー値オブジェクトをもう 1 つ追加して、配列内の辞書を変更します。

NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
[rowDict setObject:@"download successfull" forKey:@"downloadstatus"];

しかし、この後、以下のように配列の辞書から値を取得しようとすると

NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
NSString *SelectedState = (NSString*)[rowDict objectForKey:@"downloadstatus"];

クラッシュします...これを修正するのを手伝ってくれる人はいますか

これは私のコンソールのクラッシュ表示です

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData objectForKey:]: unrecognized selector sent to instance 0x61a8270'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x003b0be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x015c15c2 objc_exception_throw + 47
    2   CoreFoundation                      0x003b26fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00322366 ___forwarding___ + 966
    4   CoreFoundation                      0x00321f22 _CF_forwarding_prep_0 + 50
    5   SifyMyStorage                       0x0003b35b -[DownloadListViewController tableView:cellForRowAtIndexPath:] + 314
    6   UIKit                               0x00ec67fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
    7   UIKit                               0x00ebc77f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
    8   UIKit                               0x00ed1450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
    9   UIKit                               0x00ec9538 -[UITableView layoutSubviews] + 242
    10  QuartzCore                          0x009f4451 -[CALayer layoutSublayers] + 181
    11  QuartzCore                          0x009f417c CALayerLayoutIfNeeded + 220
    12  QuartzCore                          0x009ed37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
    13  QuartzCore                          0x009ed0d0 _ZN2CA11Transaction6commitEv + 292
    14  QuartzCore                          0x00a1d7d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
    15  CoreFoundation                      0x00391fbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
    16  CoreFoundation                      0x003270e7 __CFRunLoopDoObservers + 295
    17  CoreFoundation                      0x002efbd7 __CFRunLoopRun + 1575
    18  CoreFoundation                      0x002ef240 CFRunLoopRunSpecific + 208
    19  CoreFoundation                      0x002ef161 CFRunLoopRunInMode + 97
    20  GraphicsServices                    0x02ead268 GSEventRunModal + 217
    21  GraphicsServices                    0x02ead32d GSEventRun + 115
    22  UIKit                               0x00e6142e UIApplicationMain + 1160
    23  SifyMyStorage                       0x000020b8 main + 102
    24  SifyMyStorage                       0x00002049 start + 53
)
terminate called after throwing an instance of 'NSException'
4

3 に答える 3

0
See if you have allocated the object and also get the count of dictionary , if the value is being added also see if u have declared NSmutabledictionary or just NSdictionary ... a view at your class having the code would be more helpful to sort out your problem
于 2012-05-08T08:57:58.140 に答える
0

わかりました、いくつかのこと:

-投稿したコードは問題ありません。それは問題ではありません。(NSString *) キャストは不要ですが、問題ではありません。

-NSArray テーブルリストに問題があります。実際に NSMutableDictionary のみを配列に追加している場合は、それが間違っているか、配列が範囲外になり、配列にアクセスしていると思われるときに、その場所のメモリ内の何かにアクセスしています。

-コントローラ内で tablelist への参照をどのように保持していますか?

- 2 番目のコード ブロックをこれに変更すると、問題が見つかるはずです (これらのオブジェクトの 1 つで retainCount == 0):

NSLog(@"retain count=%d",[tableList retainCount]);
NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
NSLog(@"retain count=%d",[rowDict retainCount]);
NSString *SelectedState = [rowDict objectForKey:@"downloadstatus"];
于 2012-05-08T15:21:47.347 に答える
-2

NSMutableDictionary を割り当てないため、NSMutableDictionary が空になり、アプリがクラッシュします。

NSMutableDictionary *rowDict = [[NSMutableDictionary alloc]init];

rowDict = [tableList objectAtIndex:arrayindex];
NSString *SelectedState = [rowDict objectForKey:@"downloadstatus"];

幸運を祈ります

于 2012-05-08T09:40:25.893 に答える