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

Ios 当来自差异数组的数据需要显示哪些行具有差异内容时,如何声明行数,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我正在开发一个提醒应用程序,其中我需要显示事件名称、事件图像和事件时间。所有这些都从diff数组中获取值,但问题是,如果第一个数组的内容为2,第二个数组的内容为3,则节中的行数如果我指定了返回[timeArray count]然后应用程序崩溃。怎么办 这是我的密码: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // return [timeArray c

我正在开发一个提醒应用程序,其中我需要显示事件名称、事件图像和事件时间。所有这些都从diff数组中获取值,但问题是,如果第一个数组的内容为2,第二个数组的内容为3,则节中的行数如果我指定了返回[timeArray count]然后应用程序崩溃。怎么办

这是我的密码:

- (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;
}
NSArray*eventArray=[self-loadEventArray:timeArray withImage:imageArray withName:nameArray];
-(NSArray*)loadEventArray:(NSArray*)带图像的时间数组:(NSArray*)带名称的图像数组:(NSArray*)名称数组{
NSMutableArray*eventArray=[[NSMutableArray alloc]init];
for(int-anIndex=0;anIndex<[nameArray count];anIndex++){
Event*Event=[[Event alloc]init];//自定义对象
//识别事件和分配名称的逻辑
}
for(int-anIndex=0;anIndex<[imageArray count];anIndex++){
//从事件数组中获取链接的事件
//分配图像
}
for(int-anIndex=0;anIndex<[timeArray count];anIndex++){
//从事件数组中获取链接的事件
//分配时间
}
返回事件数组;
}

您只需创建一个字典数组即可。 如果以后要操作数组以添加或删除事件,请使用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];
下面是您的tableview数据源方法

- (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
然后在对象中指定事件值(即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]

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

我很确定,当需要加载不同的数组时,您可以更改它,检查TableView对象是否具有numberOfRowsInSection属性,您可以在其中指定新的value@JamesRGNT每次当这个数组的内容不匹配时,我都要显示所有的内容。然后发生错误。我没有得到,你怎么能得到数组中不同的计数。如果在各自的数组中保留3(名称、图像、时间)的集合,则应该是相同的。但最好的方法是不保存在数组中,您应该获取对象。@Janmenjaya,因为某些事件没有映像,所以会发生此错误。我使用NSUserDefault保存它。你能告诉我如何使用物体吗???我是初学者在iOS PLZ考虑如果这是一个愚蠢的问题。谢谢谢谢你的回答。它解决了我的崩溃问题,但是现在如果我的数组中有一个包含多个数据,那么它应该显示在第二行,但是它只显示第一个值&只有一行。data{eventImage=(“meeting ico.png”、“video ico.png”、“shopping ico.png”、“video ico.png”);eventTime=(“07.45”);eventTitle=(会议、视频、购物、视频);}像这样。在这个例子中,它应该返回我四行,但它只显示了一行我为一条记录演示的上述代码。您必须创建另一个具有不同值的字典或对象,并将其添加到数组中,等等。您能给我一个多个的示例吗?因为我尝试了多个,但没有成功:(您能尝试下面的代码吗。NSDictionary*dataDict=[[NSDictionary alloc]initWithObjects和Keys:@“我是事件标题”@“事件标题”@“我是图像”@“事件图像”@“事件图像”@“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”、“我是事件时间”,nil];[dataMutableArray addObject:dataDict];[dataMutableArray addObject:dataDict1];
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]