小编pt2*_*ph8的帖子

使用Quartz在iOS上获取PDF超链接

我花了一整天时间尝试从我的iPad应用程序中获取PDF中的超链接元数据.CGPDF*API是一个真正的噩梦,我在网上发现的关于这一切的唯一信息是我必须寻找一个"Annots"字典,但我在我的PDF中找不到它.

我甚至使用旧的Voyeur Xcode样本来检查我的测试PDF文件,但没有这个"Annots"字典的痕迹......

要知道,这是一个功能,我在每一个PDF阅读器看-这个同样的问题已经 时间在这里没有真正的实际的答案.我通常不会直接询问示例代码,但显然这次我真的需要它...任何人都有这个工作,可能有示例代码?

更新:我刚刚意识到已经完成我的测试PDF的人刚刚插入了一个URL作为文本,而不是一个真正的注释.他尝试使用注释,我的代码现在正常工作......但这不是我需要的,所以我似乎必须分析文本并搜索URL.但那是另一个故事......

更新2:所以我终于提出了一些有效的代码.我在这里张贴它,所以希望它能帮助别人.它假定PDF文档实际上包含注释.

for(int i=0; i<pageCount; i++) {
    CGPDFPageRef page = CGPDFDocumentGetPage(doc, i+1);

    CGPDFDictionaryRef pageDictionary = CGPDFPageGetDictionary(page);

    CGPDFArrayRef outputArray;
    if(!CGPDFDictionaryGetArray(pageDictionary, "Annots", &outputArray)) {
        return;
    }

    int arrayCount = CGPDFArrayGetCount( outputArray );
    if(!arrayCount) {
        continue;
    }

    for( int j = 0; j < arrayCount; ++j ) {
        CGPDFObjectRef aDictObj;
        if(!CGPDFArrayGetObject(outputArray, j, &aDictObj)) {
            return;
        }

        CGPDFDictionaryRef annotDict;
        if(!CGPDFObjectGetValue(aDictObj, kCGPDFObjectTypeDictionary, &annotDict)) {
            return;
        }

        CGPDFDictionaryRef aDict;
        if(!CGPDFDictionaryGetDictionary(annotDict, "A", &aDict)) { …
Run Code Online (Sandbox Code Playgroud)

pdf iphone quartz-graphics ipad

55
推荐指数
2
解决办法
2万
查看次数

在应用程序自动更新订阅

对于关于iTunes订阅的第一百万个问题感到抱歉,但我仍有一些疑问.

基本上我在我的应用程序中实现自动更新订阅,我想确保我做对了.以下列出了我想出的步骤:

  • 每当用户购买订阅时,将收据发送到服务器以验证它
    • 如果收据有效,请将其保存在数据库中
  • 在应用程序加载时,询问服务器是否存在此UDID的收据(这是为了确定用户是否具有有效订阅)
    • 如果是,请检查在从订阅开始日期到过期日期的日期范围内是否在商店中添加了新项目
      • 如果有的话,以某种方式通知用户这些项目并将其标记为可免费下载

这些步骤是否正确?如果是这样,为什么Apple医生说:

在大多数情况下,您的iOS客户端应用程序不需要更改.实际上,您的客户端应用程序现在变得更加简单,因为您可以使用相同的代码来恢复自动更新订阅,就像恢复非消耗性产品一样."恢复交易"中对此进行了描述.您的应用程序会在续订订阅的每个时间段内收到单独的交易; 您的申请应单独核实每张收据.

对我来说,看起来这需要一些代码来处理我提到的所有各种情况.或者我完全错了.我呢?

另外,我如何知道订阅到期日期?我无法找到在任何地方获取此信息的方法.我应该把它保存在我自己的数据库中吗?

更新:

自从我发布这个问题以来,我已经想出了一些事情.如果我错了,请随意纠正我.

首先,我想我应该在我自己的数据库中存储订阅的长度,因为正如Apple的文档中所述,您无法通过Apple的Web服务以任何方式检索它.实际上,每个订阅长度都有不同的产品标识符,因此您应该有办法将产品标识符转换为订阅长度.

此外,Sylvian 已经公布了有关他实施自动续订订阅的详细信息,所以至少我知道我的想法并没有太多缺陷.

现在唯一的问题是:我怎么知道用户有有效的订阅?我可以将这些信息存储在我的服务器上,是的,但是如何将用户与已完成的交易相关联?我应该保存设备的UDID吗?

iphone in-app-purchase

25
推荐指数
2
解决办法
1万
查看次数

在iPhone上搜索PDF

在使用Quartz尝试从PDF读取注释两天后,我设法完成并发布了我的代码.

现在我想对另一个常见问题做同样的事情:用Quartz搜索PDF文档.与以前相同的情况,这个问题已被多次询问,几乎没有实际答案.所以我首先需要一些指针,因为我自己还没有实现.

我尝试了什么:

我尝试使用CGPDFScannerScan处理TJTj运算符 - 在某些PDF上返回正确的文本,而在其他文档上它返回大多数随机字母.也许它与文本编码有关? 有人指出应该处理文本块(由BT/ET操作符标记),但我仍然没有设法这样做.有人设法从任何PDF中提取文本吗?

之后,通过将所有文本存储在一起NSMutableString并使用rangeOfString(如果有更好的方式请告诉我),搜索应该很容易.

但那么如何突出结果呢?我知道有一些运算符可以找到字形大小,所以我可以根据这些值来计算得到的矩形,但我已经读了几个小时的规格......这是一个臃肿的混乱,我疯了.有实际解释的人吗?

更新

用户Naveen Thunga发现了PDFKitten,"用于从iOS中提取PDF数据的框架".我只是尝试了演示,它似乎像宣传的那样工作.我将用更多的PDF测试它,并很快发布结果.作为旁注,代码对我来说似乎非常好 - 如果你对这些东西是如何工作感兴趣它非常棒.

pdf iphone objective-c ipad ios

23
推荐指数
1
解决办法
2万
查看次数

UIButton的标题标签单词包裹尾部截断

我需要启用自动换行和尾巴截断,在同一时间,在UIButtontitleLabel.将numberOfLines设置为大于0的值不起作用,文本保持在一行.

我已经四处寻找并且没有找到解决方案.任何的想法?

uilabel ios

19
推荐指数
3
解决办法
3万
查看次数

使用MongoDB的类似Twitter的应用程序

我正在制作一个使用经典"跟随"机制的应用程序(Twitter和网络上的许多其他应用程序使用的机制).我正在使用MongoDB.不过,我的系统有所不同:用户可以关注用户.这意味着,如果您关注某个群组,您将自动关注该群组成员的所有用户.当然,用户可以属于多个组.

这就是我想出的:

  • 用户A跟随用户B时,用户B的 id被添加到following用户A文档中的嵌入式阵列(被叫)中
  • 为了取消关注,我从following数组中删除了后续用户的id
  • 组以相同的方式工作:当用户A跟随组X时,组X的 id被添加到following数组中.(我实际上添加了一个,DBRef所以我知道连接是针对用户还是组.)

  • 当我必须检查用户A是否跟随组X时,我只是在用户A的后续数组中搜索组的ID .

  • 当我必须检查用户A是否跟随用户B时,事情变得有点棘手.每个用户的文档都有一个嵌入式数组,列出了用户所属的所有组.所以我使用一个$or条件来检查用户A是直接跟踪用户B还是通过组跟踪.像这样:

    db.users.find({'$or':{'following.ref.$id':$user_id,'following.ref.$ref','users'},{'following.ref.$id':{'$in':$group_ids},'following.ref.$ref':'groups'}}})

这很好,但我想我有一些问题.例如,如何显示特定用户的关注者列表,包括分页?我不能在嵌入文档上使用skip()和limit().

我可以改变设计并使用一个userfollow集合,它可以完成嵌入式following文档的相同工作.我尝试过这种方法的问题是,根据$or我之前使用的条件,跟随两个包含相同用户的组的用户将被列出两次.为了避免这种情况,我可以使用group或MapReduce,我实际上做了它并且它可以工作,但我希望避免这样做以保持简单.也许我只需要开箱即用.或者也许我在两次尝试时采取了错误的方法.任何人都必须做类似的事情并提出更好的解决方案?

(这实际上是对我这个老问题的后续跟进.我决定发布一个新问题来更好地解释我的新情况;我希望这不是问题.)

database-design software-design mongodb

13
推荐指数
1
解决办法
4432
查看次数

使用MongoDB制作类似Twitter的时间表

我需要的:

假设您正在使用MongoDB,并且您有一个名为的集合users,并且每个用户都有一个"跟随"数组,其中包含_id他所关注人员的用户.然后你有另一个集合statuses,每个集合包含_id其作者的状态.如何向某个用户显示他所关注的人添加的所有状态?

我尝试了什么:

我把_id当前用户所关注的所有用户放在一个数组中(我正在使用PHP),然后我用它来查找那些用户使用的所有状态$in.

问题:

这是最好的解决方案吗?

database-design mongodb

9
推荐指数
1
解决办法
3188
查看次数

UISearchDisplayController与UITableViewController

我有一个UITableViewController,我在其中添加了一个UISearchBar作为tableHeaderView使用Interface Builder.然后我添加了一个UISearchDisplayController在笔尖,并设置所有的连接(delegate,searchResultsDelegate,searchContentsController,searchResultsDataSource,所有连接到UITableViewController).然后我在代码中实现了所有委托和数据源方法.

它的功能就像一个魅力,除了一个奇怪的错误:有时搜索结果表视图不会滚动,我可以看到它背后的主表视图的闪光指示器.我对NSLog进行了显示,searchResultsTableView并且显然它是主要tableview的子视图,我想这就是我之前描述的触摸问题背后的原因.

我的错是什么?是否可以使用UITableViewControllerwith UISearchDisplayController?如果是这样,我如何设置它以使结果表视图不被添加为主表视图的子视图?

更新:我发现此示例,它使用UISearchDisplayControllerUITableViewController和明显的检索表视图被添加到主表视图中有作为.所以现在我不认为这是我的问题.

问题是我发现我正在做的和样本正在做什么之间没有任何实质性的区别.我只是在a中添加UISearchBar一个UITableView标题UITableViewController并添加一个UISearchDisplayController...当我尝试滚动时,就像iOS在主表和搜索表之间混淆了一样.你有什么想法?

更新:增加了200个代表奖金.只有你知道你在说什么才能回答.

iphone cocoa-touch uisearchdisplaycontroller

7
推荐指数
1
解决办法
5929
查看次数

用中间件覆盖Django身份验证

我有一个Django网站和一个MyBB论坛,我想在他们之间共享身份验证.我的网站曾经是留言板; 然后我在Django中构建了一些其他部分,MyBB和Django都运行在同一个域中.我已经建立了一个系统,在注册时(在论坛上)每个用户都有两个用户:一个Django用户和一个MyBB用户.用户使用论坛登录,因此我需要Django来读取MyBB的cookie并将相应的Django帐户设置为登录用户.

我可以用中间件做到吗?该中间件将读取MyBB的cookie(其中包含MyBB用户的id)并设置request.user为相应的Django用户.我是Django的新手,我不确定在中间件中设置request.user(或调用authenticate)是一个好主意(或者是否有更好的方法).

authentication django django-middleware

7
推荐指数
2
解决办法
5896
查看次数

仍然使用ASIHTTPRequest是否安全?

Ben Copsey放弃了ASIHTTPRequest.它差不多两个月前宣布,但我刚刚意识到这一点.

我正在使用它的项目中.在这个阶段用其他东西替换它不是一个大问题(现在每个人都在谈论AFNetworking),但是:

  1. 如果我可以避免更换它,那就更好了.我宁愿把时间花在其他事情上
  2. 我想支持iOS <4,但AFNetworking和LRResty只支持4>
  3. 我还有一些其他很大程度上取决于它的应用程序

我很确定其他人都在我的情况.所以我的问题是:继续使用它是否安全?

iphone asihttprequest

6
推荐指数
1
解决办法
930
查看次数

是否可以使UISlider更小?

我担心我在这里遗漏了一些明显的东西,但我无法在任何地方找到答案,我也无法自己解决,所以我会问这里.

是否有可能使UISlider略小于默认值,就像在iPhone上的"iPod"应用程序中看到的那样?Interface Builder的高度似乎被冻结在23点.

它是如何在iPod应用程序上完成的?它使用自定义图像吗?

iphone cocoa-touch uislider

5
推荐指数
1
解决办法
2905
查看次数