gpt4 book ai didi

iphone TableView 滚动中止 - 无法识别的选择器

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:11 36 4
gpt4 key购买 nike

我知道有很多关于同一件事的问题,但到目前为止我还没有能够对我的问题应用任何解决方案。而且我还没有弄清楚如何使用 Instruments。

我正在学习一个 iPhone 应用程序的基本教程,只是想稍微调整一下(我是 Objective C 的新手)。我希望它从带有字典数组而不是字符串数组的 plist 中读取。该表最初正确显示数据。但是,每当我向上滚动表格(并离开屏幕)时,我都会收到无法识别的选择器异常。只需使用 NSStrings 填充员工就可以了。我搞不清楚了。

ViewController 的相关部分:

@interface RootViewController : UITableViewController {

NSMutableArray *employees_;
}

@property (nonatomic, retain) NSMutableArray *employees;
@end

@implementation RootViewController

@synthesize employees=employees_;


- (void)viewDidLoad
{
[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"Employees" ofType:@"plist"];

NSMutableArray *empArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

employees_ = [empArray valueForKey:@"name"];
[empArray release];

}

- (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] autorelease];
}

// Configure the cell.

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.text = [self.employees objectAtIndex:indexPath.row];//this is where it errors

return cell;
}
- (void)dealloc
{
[employees_ release];
[super dealloc];
}

@end

和plist:

array
dict
key name /key
string Employee One /string
key id /key
string T1234 /string
/dict
dict
key name /key
string Employee Two /string
key id /key
string T5678 /string
/dict
/array

我收到的错误:

2011-10-18 20:02:44.313 MyApp[65148:bc03] -[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x689a0502011-10-18 20:02:44.316 MyApp[65148:bc03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x689a050'*** Call stack at first throw:(    0   CoreFoundation                      0x00dc25a9 __exceptionPreprocess + 185    1   libobjc.A.dylib                     0x00f16313 objc_exception_throw + 44    2   CoreFoundation                      0x00dc40bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187    3   CoreFoundation                      0x00d33966 ___forwarding___ + 966    4   CoreFoundation                      0x00d33522 _CF_forwarding_prep_0 + 50    5   MyApp                    0x00002a96 -[RootViewController tableView:cellForRowAtIndexPath:] + 326    6   UIKit                               0x00089b98 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634    7   UIKit                               0x0007f4cc -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75    8   UIKit                               0x000948cc -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561    9   UIKit                               0x0008c90c -[UITableView layoutSubviews] + 242    10  QuartzCore                          0x016aca5a -[CALayer layoutSublayers] + 181    11  QuartzCore                          0x016aeddc CALayerLayoutIfNeeded + 220    12  QuartzCore                          0x016540b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310    13  QuartzCore                          0x01655294 _ZN2CA11Transaction6commitEv + 292    14  QuartzCore                          0x0165546d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99    15  CoreFoundation                      0x00da389b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27    16  CoreFoundation                      0x00d386e7 __CFRunLoopDoObservers + 295    17  CoreFoundation                      0x00d011d7 __CFRunLoopRun + 1575    18  CoreFoundation                      0x00d00840 CFRunLoopRunSpecific + 208    19  CoreFoundation                      0x00d00761 CFRunLoopRunInMode + 97    20  GraphicsServices                    0x00ffa1c4 GSEventRunModal + 217    21  GraphicsServices                    0x00ffa289 GSEventRun + 115    22  UIKit                               0x00022c93 UIApplicationMain + 1160    23  MyApp                    0x00002249 main + 121    24  MyApp                    0x000021c5 start + 53)terminate called throwing an exceptionCurrent language:  auto; currently objective-c(gdb) 

最佳答案

有两个潜在的问题:

  1. 您需要确保对 employees_ = [empArray valueForKey:@"name"] 的调用实际上返回了一个 NSArray

  2. 一旦排除了一个,假设您没有使用 ARC,您的 employees_ivar 将在 TableView 有机会配置自身之前被释放。尝试

    employees_ = [[empArray valueForKey:@"name"] retain];

然后在您的 viewDidUnload 和 dealloc 方法中释放 employees_。

很难从堆栈中分辨出来,因为它确实说你的 ivar 是一个 NSCFString,但这可能只是因为它引用了一个无效/垃圾内存地址。不过,根据您的 plist 描述,第 1 点的可能原因。

关于iphone TableView 滚动中止 - 无法识别的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815266/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com