UITableView使用NSMutableArray显示动态内容

发布于 2024-08-14 05:28:34 字数 954 浏览 4 评论 0原文

一直在寻找解决方案很长一段时间,但仍然没有成功,也许这里有人可以帮助我。

我创建了一个应用程序,该应用程序运行一个与后台网络服务器通信的线程。有时,线程会收到我想要在 UITableView 中显示的信息。由于内容的动态性质,我决定 NSMutableArray 应该足以存储来自网络服务器的信息。

每当我从网络服务收到信息时,我的 AppDelegate 都会发送一条通知。我的 UITableView 注册以接收我打算在 UITableView 中显示的某些类型的信息。

UITableViewController 的 initWithStyle 方法包含以下代码:

- (void)addContact:(NSNotification *)note {
    NSLog(@"%@", [note object]);

    NSString *message = (NSString *)[note object];
    NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];

    contact = name;
    [array addObject:contact];
}   

- (void)viewDidLoad {
    [super viewDidLoad];

    array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];

    tv.dataSource = self;
    tv.delegate = self;

    self.tableView = tv;
}

AddContact 中的数组包含 TableView 中显示的数据。我在 ViewDidLoad: 中手动添加到数组中的所有数据都会显示在表中,但在 AddContact: 方法中添加的数据不会出现这种情况。

有人知道我做错了什么吗?

Been looking for a solution for a long while now, but still no success, perhaps someone here can help me.

I created an application that runs a thread that communicates with a webserver in the background. Occasionally the thread receives information that I'd like to display in a UITableView. Because of the dynamic nature of the content I decided a NSMutableArray should be sufficient to store the information from the webserver.

Whenever I receive information from the webservice my AppDelegate sends a notification. My UITableView registers to receive certain kinds of information which I intend to show in the UITableView.

The initWithStyle method of the UITableViewController contains the following code:

- (void)addContact:(NSNotification *)note {
    NSLog(@"%@", [note object]);

    NSString *message = (NSString *)[note object];
    NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];

    contact = name;
    [array addObject:contact];
}   

- (void)viewDidLoad {
    [super viewDidLoad];

    array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];

    tv.dataSource = self;
    tv.delegate = self;

    self.tableView = tv;
}

The array in AddContact contains the data displayed in the TableView. All data I manually add to the array in ViewDidLoad: will be shown in the table, but it doesn't happen for the data added in the AddContact: method.

Anyone got an idea what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

欲拥i 2024-08-21 05:28:34

更新是否发生在主线程上?
您可以使用这种刷新功能来确保它确实有效。

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

Is the update happening on the main thread?
You can use this sort of refresh function to make sure it does.

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文