如何使用自定义模型?

时间:2014-07-10 20:45:03

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

我尝试使用自定义模型来填充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类型的未捕获异常终止

1 个答案:

答案 0 :(得分:0)

  

现在,当我想获得值

时,它失败了

这可能是因为你还没有创建数组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!");
}

有可能发生这种情况,因为你的表中某些行的行数多于数组中的项目。