【问题标题】:How to use use a custom model?如何使用自定义模型?
【发布时间】:2014-09-01 09:13:19
【问题描述】:

我尝试使用自定义模型填充 tableView,但它不起作用。

在 cellAtRow 方法中,我的自定义对象实例为空。

SmsModel.h

@interface SmsModel : NSObject
@property (nonatomic, strong) NSString *carrierId;
@property (nonatomic, strong) NSString *carrierName;
@property (nonatomic, strong) NSString *phoneNumber;
- (id)initWithData :(NSString *)phoneNumber : (NSString *)carrierId;
@end

SmsModel.m

#import "SmsModel.h"

@implementation SmsModel
- (id)initWithData :(NSString *)phoneNumber : (NSString *)carrierId
{
    self = [super init];
    if (self)
    {
        self.phoneNumber = phoneNumber;
        self.carrierId = carrierId;
    }
    return self;
}
@end

现在这是我设置值的方式

NSArray *data = result[@"data"];
for (NSDictionary *smsData in data) {
    SmsModel * smsObj = [[SmsModel alloc]initWithData:smsData[@"input"]: smsData[@"crr_id"]];
    NSLog(@"smsObjphoneNumber=%@", smsObj.phoneNumber);//works
    [self.SmsDataArray addObject:smsObj];
    [self.tableView reloadData];
}

现在我想获取值时失败了

SmsModel * smsObj = self.SmsDataArray[indexPath.row];
NSLog(@"smsObj.phoneNumber %@",smsObj.phoneNumber);

当我记录任何内容时,它都是空的。

我什至尝试过投射

SmsModel * smsObj =  (SmsModel *)self.SmsDataArray[indexPath.row];

仍然为空。

编辑

我初始化了数组:

self.SmsDataArray = [[NSMutableArray alloc]init];

但现在我得到一个错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 ..

0]' * 首先抛出调用栈: (0x2e73ae83 0x38a976c7 0x2e670d95 0xb4a35 0x30ff1315 0x30f996cd 0x30f98ef1 0x30ebf353 0x30b45943 0x30b41167 0x30b40ff9 0x30b40a0d 0x30b4081f 0x30b3a54d 0x2e705f69 0x2e7038f7 0x2e703c43 0x2e66e471 0x2e66e253 0x333a82eb 0x30f23845 0xa4705 0x38f90ab7) libc++abi.dylib:以 NSException 类型的未捕获异常终止

【问题讨论】:

  • 你实例化你的 SmsDataArray 了吗?
  • 不,我没有,我必须这样做吗? @rdelmar
  • 当然可以。您不能将对象添加到不存在的数组中。
  • @rdelmar 我现在启动它我收到错误,请检查我的编辑
  • 你在 numberOfRowsInSection 中返回了什么?

标签: ios objective-c uitableview model-view-controller model


【解决方案1】:

现在我想获取值时失败了

这可能是因为您还没有创建数组self.SmsDataArray。如果该属性是 nil,那么您调用它的任何方法(包括 objectAtIndex: 或等效的简写形式)都将返回 nil。

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 ..

这里的消息几乎可以告诉您问题所在。您正在尝试访问数组中不存在的项目。尝试使用条件包围您的数组访问,如下所示:

if (indexPath.row < [self.SmsDataArray count]) {
    return self.SmsDataArray[indexPath.row];
}
else {
    NSLog(@"Oops, I just tried to access a non-existent element from the array!");
}

发生这种情况的可能是因为您的表格中的行数多于数组中的项目数。

【讨论】:

  • 我现在明白了,但我有一个错误你能看到我的编辑吗?
  • 谢谢兄弟,我还不能投票给你,但我真的很感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
相关资源
最近更新 更多