Articles of iphone

UITableView与来自API的图像

UITableView是一种以列表方式显示结构化数据的好方法。 与Android不同,iOS在促进开发人员使用UITableView方面做得很好。 当您的应用程序显示来自API调用的数据时,事情的学习曲线确实陡峭。 在这里曲线不会停止变陡。 如果您计划在UITableViewCell中显示图像,它将变得有些棘手。 这正是我们今天要做的。 我们打算做什么? 我不打算深入研究UITableView实现。 我给你创造的自由,可以根据需要设计UITableViewCell并使基本应用程序正常工作。 首先使用虚拟数据和占位符图像测试UITableView始终是一个好主意。 一旦您的UITableView启动并运行了虚拟数据和占位符图像,请从GitHub API获取内容。 您可以通过请求以下URL来获得您的GitHub关注者。 https://api.github.com/users/ / followers API响应将具有许多键值。 我们将限制本帖子的图片和名称。 假设您知道如何进行网络调用和解析响应数据以显示在UITableViewCell上,现在让我们集中讨论您应该面对的两个问题 表格视图滚动很慢。 滚动UITableView时,图像会更改。 用户A的个人资料图片可能与用户B的名字一起出现 问题1:为什么UITableView滞后? 当您尝试在UITableViewCell的UIImageView上呈现图像时,将进行网络调用,该网络调用将从图像url获取图像数据,然后使用响应数据创建图像。 每次创建单元时都会发生这种情况。 假设您有3个UITableViewCells,那么将有3个网络调用来获取每个单元格的图像。 当我们处理更多单元格时,随着UITableView重用单元格,此问题会放大。 我如何摆脱时滞? 为了恢复完美的滚动效果,我们可以使用多任务处理。 我们将在后台获取图像数据,并且在接收到图像数据后,将用从API调用接收到的图像替换占位符图像。 在cellForRowAtIndexPath中, DispatchQueue.global(qos:.background).async { 让url = URL(string:(activeUser?.avatarUrl)!) 让数据=尝试? 数据(contentsOf:url!) 让图像:UIImage = UIImage(data:data!)! DispatchQueue.main.async { self.imageCache.setObject(image,forKey:NSString(string:(activeUser?.login!)!)) cell.imgFollow.image =图片 } } 但是,如果图像数据从未收到怎么办? 这是占位符为您提供帮助的地方。 如果未接收到图像数据,则UITableViewCell将具有占位符图像。 问题2:为什么图像在滚动时会不断变化? 如上所述,每次创建UITableViewCell时都会进行网络调用。 说,您的单元格已创建,图像请求已发出,但是在图像响应完成之前,您滚动到另一个单元格。 tableview不知道数据。 […]

正确释放一个viewController,将其设置为其他类的委托?

我做的第一件事是创建一个ViewController并将其推送到导航控制器。 viewController = [[MyViewController alloc] init]; [navController pushViewController:viewController animated: NO]; [viewController release]; 保留计数现在是2(pushViewController使用2保留显然但不是我的责任)到目前为止一切都很好。 在MyViewController中,我正在创建一个类的实例,并将ViewController设置为该实例的委托。 timer = [[MyBackgroundTimer alloc] initWithInterval:20]; [timer setDelegate:self]; 现在viewControllers保留计数增加了1因为setDelegate: 但是当我稍后释放viewController时,它永远不会调用dealloc因为我还有一个保留计数。 当您将自己设置为委托时,如何正确删除保留计数?

– :发送到解除分配的实例的消息

我已使用委托将NSArray值传递回父视图。 它是在父视图中接收的 – (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath { manufactureSearchObjectString = [arrayValues valueForKey:@”MANUFACTURER”]; NSLog(@”%@”,[arrayValues valueForKey:@”MANUFACTURER”]); manufactureResultIndexPath = myIndexPath; [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. } 如果我要执行此代码并选择子视图的表格单元格,它显然执行委托,但随后冻结并将此错误激发到日志 2011-10-31 14:06:16.670 code[12610:207] ( “Alfa Romeo” ) 2011-10-31 14:06:16.673 code[12610:207] *** -[__NSArrayI isEqualToString:]: message sent to deallocated instance 0x6859280 但是,如果我在委托方法中注释掉以下行 – […]

杀死线程或替代方案

有什么方法可以通过以下方式杀死线程: [NSThread detachNewThreadSelector:@selector(serverFetchInThread) toTarget:self withObject:nil]; 我正在处理的场景是,在我的主线程中,我让用户在我的搜索栏中输入数据以及用户输入的内容我需要发送到服务器以便在单独的线程中进行搜索。 现在,如果用户通过删除旧数据并输入新数据来更改其选择,我不希望先前的线程浪费时间,杀死它并使用新数据生成新线程。 有没有其他更好的方法来处理这种情况,请指导我。

我们可以在IOS SDK iphone中检索序列号,颁发者DN,x509证书的主题详细信息

我们可以使用ios sdk或Openssl检索X509证书详细信息(序列号,发卡者DN,主题详细信息)吗?

使用NSPredicate获取核心数据对象的问题

在开始之前,让我告诉你我的数据模型是什么样的: 然后我有一个带有以下谓词的获取请求: NSArray *allowedPackNames = @[@”success, happiness, free”]; self.fetchedResultsController = [Author MR_fetchAllGroupedBy:nil withPredicate:[NSPredicate predicateWithFormat:@”ANY quotes.quote.pack.packName IN %@”, allowedPackNames] sortedBy:AuthorKeys.name ascending:YES delegate:self]; 我想获取所有具有成功或幸福或免费的packName引用的作者。 如下面的关系表中所示,作者有一组NSB引号。 但是,当我执行此操作时,我收到以下错误: CoreData: error: (1) I/O error for database at /Users/Abdul/Library/Application Support/iPhone Simulator/6.1/Applications/DA17421B-A54D-42E3-9694-FDCBFF7F8BA4/Library/Application Support/MyCoolApp/MyCoolApp.sqlite. SQLite error code:1, ‘no such column: t2.ZQUOTE’ 2013-04-05 15:26:47.175 MyCoolApp[78622:c07] Core Data: annotation: -executeRequest: encountered exception = I/O error […]

在iOS中显示多个视图的最佳实践

我正在尝试构建一个教育应用程序,它将拥有大约3-5个完全不同的页面/屏幕。 每个屏幕包含一个谜题,每个谜题独立于所有其他谜题(屏幕)。 一旦解决了当前屏幕上的谜题,我想转换到一个新的(随机选择的)屏幕。 我会允许多次显示相同的谜题,但是,如果它已经显示之前需要重置。 我尝试使用segues这样做,但这似乎需要一个UINavigationController,这不是我想要呈现的体验(因为它需要预定义的屏幕层次结构)。 我假设最好的方法是让每个屏幕都是完全独立的UIViewControllers,对吗? 我只是不确定如何协调它们之间的导航/渲染。 我很欣赏你所知道的最佳实践。 谢谢!

Xcode 4导航项目提示属性行为不端?

在Interface Builder中进行设计并将文本添加到提示属性时,它会创建一个额外的顶部标题。 这需要在导航栏中允许2个图块所需的额外厚度。 一旦我删除了文本,让我们说重新设置它的方式,它保持那个厚度,即使那里没有文字。 在运行时,切换视图会使条形增长和缩小,这并不好。 我的问题是,如何将其重置为默认的单行粗细条? 谢谢吉姆

OpenGL ES(在iOS上):glDrawArrays上的EXC_BAD_ACCESS调用球体绘制

我需要一个程序生成的OpenGL ES球体 – 我用Google搜索并发现了这个OGL代码 ,并认为它看起来整洁,所以我将其修改为OGLES。 我删除了仅使用OGL的glBegin(),glEnd()并将原始的drawtri和drawsphere修改为generatetri和generateSpherePoints。 这些新函数将GLfloat值分配给球体法线和顶点的静态数组,这意味着我可以随心所欲地调用一个新函数drawSphere(),并且不需要重新计算这些点。 我还在generateSpherePoints中添加了x,y,z参数,允许指定非零球心。 问题是我的OGLES版本在glDrawArrays行的XCode中给出了一个EXC_BAD_ACCESS。 通过调试器,我检查了’sphereNormals’和’sphereVertices’数组,它们看起来很好。 如果有人可以提出问题的原因,我会非常感激,因为我现在对此一无所知! #define SX .525731112119133606 #define SZ .850650808352039932 /* Drawing Sphere */ static GLfloat vdata[12][3] = { {-SX, 0.0, SZ}, {SX, 0.0, SZ}, {-SX, 0.0, -SZ}, {SX, 0.0, -SZ}, {0.0, SZ, SX}, {0.0, SZ, -SX}, {0.0, -SZ, SX}, {0.0, -SZ, -SX}, {SZ, SX, 0.0}, {-SZ, SX, […]

为什么从NSObjectinheritance的对象的大小是16bytes

我有一个从NSObjectinheritance的新对象 Car *myCar = [[Car alloc] init]; 这将返回16, Car对象的大小 printf(“myCar object: %d\n”, sizeof(*myCar)); 请帮助我说清楚,谢谢