gpt4 book ai didi

iphone - PerformselectorinBackground 不起作用

转载 作者:行者123 更新时间:2023-11-29 03:40:58 27 4
gpt4 key购买 nike

在 View 中,我显示从 coredata 获取的图像,我使用轮播类显示的图像。在同一 View 中,我有 Facebook 按钮,它将导航到另一个屏幕。当我单击 Facebook 按钮时,不会执行该操作,加载图像后仅出现下一个屏幕,单击按钮后不会立即调用该按钮操作。

在 viewDidLoad 中我调用了:

[self performSelectorInBackground:@selector(popularImages) withObject:nil];

popularImages 方法:

- (void)popularImages
{
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Deals"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ispopular == 1"];
[request setPredicate:predicate];
NSLog(@"popular Hypes called");
[self.managedObjectContext executeFetchRequest:request returnManagedObjectIDs:NO onSuccess:^(NSArray *deals) {
deals123 = [[NSMutableArray alloc] initWithArray:deals];
ij = 1;

for (Deals *deals in deals123) {
customizedMessage = [deals valueForKeyPath:@"txtmsgrec"];
dealIdString = [deals valueForKeyPath:@"dealsId"];
descriptionStr = [deals valueForKeyPath:@"dealdescription"];
captionStrArray = [deals valueForKeyPath:@"dealsassets.caption"];

[customizedMessageDict setObject:customizedMessage forKey:[NSString stringWithFormat:@"dealid%d",ij]];
[dealDict setObject:customizedMessageDict forKey:@"dealsmessage"];

[dealsIdDict setObject:dealIdString forKey:[NSString stringWithFormat:@"dealid%d",ij]];
[dealDict setObject:dealsIdDict forKey:@"dealsId"];

NSDictionary *dict = [NSDictionary dictionaryWithObject:captionStrArray forKey:@"caption"];
NSArray *captionTemparr = [[dict objectForKey:@"caption"] allObjects];

NSArray *assets = [deals valueForKeyPath:@"dealsassets.dealassetid"];
NSDictionary *dealassetidDict = [NSDictionary dictionaryWithObject:assets forKey:@"dealassetid"];
NSArray *dealassetidTemparr = [[dealassetidDict objectForKey:@"dealassetid"] allObjects];

[dealsUrlDict setObject:[[dealassetidDict objectForKey:@"dealassetid"] allObjects] forKey:[NSString stringWithFormat:@"dealid%d",ij]];
[dealDict setObject:dealsUrlDict forKey:@"delasURL"];
[dealsdescriptionDict setObject:descriptionStr forKey:[NSString stringWithFormat:@"dealid%d",ij]];
[dealDict setObject:dealsdescriptionDict forKey:@"dealsDescription"];
[dealscaptionDict setObject:captionTemparr forKey:[NSString stringWithFormat:@"dealid%d",ij]];
[dealDict setObject:dealscaptionDict forKey:@"dealscaption"];

ij++;
}
NSArray *array = [[dealDict valueForKey:@"delasURL"]allKeys];
NSLog(@"allKeys]class %@",[[[dealDict valueForKey:@"delasURL"]allKeys]class]);
NSDictionary *dealurlDict = [dealDict valueForKey:@"delasURL"];
NSDictionary *dealDescDict = [dealDict valueForKey:@"dealsDescription"];
NSDictionary *dealCaptionDict = [dealDict valueForKey:@"dealscaption"];
NSDictionary *dealIDDict = [dealDict valueForKey:@"dealsId"];
NSDictionary *dealMessageDict = [dealDict valueForKey:@"dealsmessage"];

for(int i=0;i<[array count];i++)
{
NSString *keyvalue = (NSString *)[array objectAtIndex:i];
NSString *dealId = [dealIDDict valueForKey:keyvalue];
NSArray *dealUrl = [dealurlDict valueForKey:keyvalue];
NSString *dealdesc = [dealDescDict valueForKey:keyvalue];
NSArray *dealcaption = [dealCaptionDict valueForKey:keyvalue];
NSString *dealMessage = [dealMessageDict valueForKey:keyvalue];

if([dealUrl count] == [dealcaption count])
{
//[dealUrl enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop)
for(int j = 0; j<[dealUrl count]; j++)
{
PopularHypesModal *dobject = [[PopularHypesModal alloc]init];
dobject.dealsID = dealId;
dobject.dealDescription = dealdesc;
dobject.dealcaption = [dealcaption objectAtIndex:j];
dobject.dealsUrl = [dealUrl objectAtIndex:j];
dobject.dealsMessage = dealMessage;
[self.items addObject:dobject];
[dobject release];
}
}
else
{
//[dealUrl enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop)
for(int j=0;j<[dealUrl count];j++)
{
PopularHypesModal *dobject=[[PopularHypesModal alloc]init];
dobject.dealsID = dealId;
dobject.dealDescription = dealdesc;
dobject.dealsMessage = dealMessage;
if([dealcaption count]>0)
{
dobject.dealcaption =[dealcaption objectAtIndex:0];
}
dobject.dealsUrl=[dealUrl objectAtIndex:j];
[self.items addObject:dobject];
[dobject release];
}
// ];
}
}
//];

carousel.dataSource = self;
carousel.delegate = self;

}onFailure:^(NSError *error) {
NSLog(@"Error fetching: %@", error);
popularHypes = YES;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Server Problem" message:@"Sorry, There is some Error with server,Please try after some time" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
[alert release];
ij++;
}];//1st

[dealDict retain];
}

我在xib中添加的按钮,我该如何克服这个问题?

最佳答案

在后台线程上运行不会给您带来任何问题,除非您尝试从同一后台线程更新 UI 元素。请务必将任何与 UI 相关的事件转发到主线程。例如:

- (void)viewWillAppear:(BOOL)animated {
[self performSelectorInBackground:@selector(refreshTableView)];
[super viewWillAppear:animated];
}

- (void)refreshTableView {
// YourCode
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}

希望对你有帮助:)

关于iphone - PerformselectorinBackground 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18455970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com