当来自差异数组的数据需要显示哪些具有差异内容时,如何声明 No.of 行



我正在开发一个提醒应用程序,我需要显示事件名称、事件图像和事件时间。它们都从 diff 数组中获取值,但问题是,如果第一个数组的内容是 2,第二个数组是 3,那么如果我指定了 return[timeArray count],则在一个部分的 No.of 行中; 然后应用程序崩溃。怎么办??

这是我的代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   // return [timeArray count];
   // return [imagesArray count];
    return [nameArrayP2 count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    cell.timeLabel.text = [timeArray objectAtIndex:indexPath.row];
        cell.eventNameLbl.text =[nameArrayP2 objectAtIndex:indexPath.row];
        UIImage *image=[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]];
        cell.imgView.image =image;
        return cell;
}

6 月 6 日更新的代码:

 NSArray *timeA = [[NSUserDefaults standardUserDefaults]objectForKey:@"TimeArray"];
    timeArray =[[NSMutableArray alloc]init];
    [timeArray addObjectsFromArray:timeA];
    NSLog(@"%@",timeArray);

    NSArray *nameA = [[NSUserDefaults standardUserDefaults]objectForKey:@"nameArrayP2"];
    nameArrayP2 =[[NSMutableArray alloc]init];
    [nameArrayP2 addObjectsFromArray:nameA];
    NSLog(@"%@",nameArrayP2);

    NSArray *imageA =[[NSUserDefaults standardUserDefaults]objectForKey:@"images"];
    imagesArray =[[NSMutableArray alloc]init];
    [imagesArray addObjectsFromArray:imageA];
    NSLog(@"abhi%@",nameArrayP2);

    dataMutableArray = [[NSMutableArray alloc]init];
    NSDictionary *dataDict = [[NSDictionary alloc]initWithObjectsAndKeys:nameArrayP2,@"eventTitle", timeArray,@"eventTime",imagesArray, @"eventImage", nil];
     NSDictionary *dataDict1 = [[NSDictionary alloc]initWithObjectsAndKeys:nameArrayP2,@"eventTitle", timeArray,@"eventTime",imagesArray, @"eventImage", nil];
    //dataMutableArray =[NSMutableArray arrayWithArray:[dataDict allValues]];
    [dataMutableArray addObject:dataDict]; [dataMutableArray addObject:dataDict1];
   // [dataMutableArray addObject:dataDict];
    NSLog(@"All Data=%@",dataMutableArray);

您可以为事件创建一个对象,其中可以具有名称,图像,时间等的属性。

在重新加载 tableView 之前,请从数组列表中创建一个对象,并将此事件另存为数组中的对象,然后对 tableView 使用相同内容。

你应该有一个自定义对象,应该使用不同的 dataArray 进行初始化,然后在 tableview 数据源方法中使用自定义对象的数组

NSArray *eventArray = [self loadEventArray:timeArray withImage:imageArray withName:nameArray];
- (NSArray*) loadEventArray:(NSArray*) timeArray withImage:(NSArray*) imageArray withName:(NSArray*) nameArray {
NSMutableArray *eventArray = [[NSMutableArray alloc] init];
for(int anIndex = 0; anIndex < [nameArray count]; anIndex++){
    Event *event = [[Event alloc] init]; // Custom Object
    // Your logic to identify event and assign name
}
for(int anIndex = 0; anIndex < [imageArray count]; anIndex++){
    // Fetch the linked event from event Array
    // assign image
}
for(int anIndex = 0; anIndex < [timeArray count]; anIndex++){
    // Fetch the linked event from event Array
    // assign time
}
return eventArray;
}

您可以简单地创建一个字典数组。如果以后要操作数组以添加或删除事件,请获取 NSMutableArray 的属性。

NSMutableArray *dataMutableArray = [[NSMutableArray alloc]init];

您可以创建数据字典并将其添加到数组中。像这样的东西。

NSDictionary *dataDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"I am event title",@"eventTitle", @"I am image",@"eventImage",@"I am event time", @"eventTime", nil];
[dataMutableArray addObject:dataDict];

您还可以创建一个模型类来保存事件数据,例如

@property (strong, nonatomic) NSString *eventName;
@property (strong, nonatomic) NSString *eventTime;
@property (strong, nonatomic) NSString *eventDate;
//Inside your view controller
    EventData *eventObject = [[EventData alloc]init];
    eventObject.eventTime = @"I am event time";
    eventObject.eventImage = @"I am image";
    eventObject.eventTitle = @"I am event title";
    [dataMutableArray addObject:eventObject];

下面是您的表视图数据源方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [dataMutableArray count];
}

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
        {
//You can use any of the one approach 
//1)
            NSDictionary *dataDict = [dataMutableArray objectAtIndex:indexPath.row];
            cell.timeLabel.text = [dataDict valueForKey:@"eventTime"];
            cell.eventNameLbl.text =[dataDict valueForKey:@"eventTitle"];
            UIImage *image=[UIImage imageNamed:[dataDict valueForKey:@"eventImage"]];
            cell.imgView.image =image;
            return cell;
//2)    
        EventData *eventObject = [dataMutableArray objectAtIndex:indexPath.row];
       cell.timeLabel.text = eventObject.eventTime;
       cell.eventNameLbl.text = eventObject.eventTitle;
       UIImage *image=[UIImage imageNamed:eventObject.eventImage];
       cell.imgView.image =image;
       return cell;
    }

你应该遵循这种方式

以一个 NSObject 类为例,比如说EventBO并取 2 个NSString和 1 个NSDate(或根据您的要求采用其他类型的(属性,如 (eventName, eventImage, eventTime(。注意:将映像名称保留在映像属性中

#import <Foundation/Foundation.h>
@interface EventBO : NSObject
@property (nonatomic, strong) NSString *eventName;
@property (nonatomic, strong) NSString *eventImage;
@property (nonatomic, strong) NSDate *eventTime;
@end

在控制器中:

以全局可变数组为例,NSMutableArray *arrEvents

分配阵列(最好在viewDidLoad上(

arrEvents = [[NSMutableArray alloc] init];

然后在对象中分配 Event 的值(即 eventName、eventTime 和 eventImage(,并将对象添加到全局数组中

EventBO *objEvent = [[EventBO alloc]init];
objEvent.eventName = @"test";
objEvent.eventImage = @"test.png";
objEvent.eventTime = [NSDate date]; //You can put your time, I have set current date-time
[arrEvents addObject:objEvent]

现在使用表中的数组来获取对象并显示数据。

最新更新