我有一个UITableView与不同高度的单元格,我需要知道它们何时完全可见.
目前,我循环遍历可见单元格列表中的每个单元格,以检查每次滚动视图时它是否完全可见.这是最好的方法吗?
这是我的代码:
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
CGPoint offset = aScrollView.contentOffset;
CGRect bounds = aScrollView.bounds;
NSArray* cells = myTableView.visibleCells;
for (MyCustomUITableViewCell* cell in cells) {
if (cell.frame.origin.y > offset.y &&
cell.frame.origin.y + cell.frame.size.height < offset.y + bounds.size.height) {
[cell notifyCompletelyVisible];
}
else {
[cell notifyNotCompletelyVisible];
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
请注意* - (NSArray )visibleCells返回可见单元格,这些单元格完全可见且部分可见.
编辑2:
这是在结合lnafziger和Vadim Yelagin的解决方案后的修订代码:
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
NSArray* cells = myTableView.visibleCells;
NSArray* indexPaths = myTableView.indexPathsForVisibleRows;
NSUInteger cellCount = [cells count]; …Run Code Online (Sandbox Code Playgroud) 上周我问了一个关于模拟器错误的问题,NSAttributedString没有显示:iOS 7模拟器错误 - NSAttributedString没有出现
不幸的是,现在看来这不是模拟器错误,而是iOS 7错误.我现在已经在iPhone 5设备上重现了这个问题.
该错误似乎是使用NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName作为NSAttributedString的属性的组合.
到目前为止,我只测试了两台iOS 7设备,问题只出现在其中一台设备上.即使他们已经升级到完全相同的版本:
带iOS 7.0的第一部iPhone 5(11A465):不显示文字
升级到7.0.2后的第一个iPhone 5(11A501):不显示文本
运行iOS 7.0的第二部iPhone 5(11A4449d):正确显示文本
升级到7.0.2(11A501)后的第二部iPhone 5:不显示文字
所以看来Apple在iOS 7.0(11A4449d)之后引入了这个bug.我已经向他们提交了一个错误,并会根据我得到的任何回复更新您.
重现bug的步骤
如果您运行的是iOS 7.0.2,那么您应该可以重现此错误.
在您的设备上下载并运行该项目https://github.com/rohinnz/iOS-7-BUG---NSAttributedString-does-not-appear
要么
1)在Xcode 5中创建一个新的"单视图应用程序".什么都叫它.
2)在ViewController.m中,将viewDidLoad方法替换为:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
@{NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
NSParagraphStyleAttributeName:paragraph}];
UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
myLabel.backgroundColor = [UIColor greenColor];
myLabel.attributedText = attrStr;
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
Run Code Online (Sandbox Code Playgroud)
3)编译并在您的设备上运行.根据您的iOS …
有关NSHTTPCookieStorage的cookie接受政策的Apple文档令人困惑.
这就是文档所说的:
NSHTTPCookieStorage实现管理cookie存储的单例对象(共享实例).每个cookie由NSHTTPCookie类的实例表示.通常,cookie在所有应用程序之间共享,并跨进程边界保持同步.会话cookie(cookie对象的isSessionOnly方法返回YES)是单个进程的本地cookie,不共享.
iOS注意:在iOS中的应用程序之间不共享Cookie.
注意:对cookie接受策略所做的更改会影响使用cookie存储的所有当前正在运行的应用程序.
以下关于 - (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)aPolicy
默认的cookie接受策略是NSHTTPCookieAcceptPolicyAlways.更改cookie策略会影响使用cookie存储的所有当前运行的应用程序.
现在我的第一个想法是,如果应用程序调用setCookieAcceptPolicy,更改将影响其他正在运行的应用程序.情况似乎并非如此.调用setCookieAcceptPolicy只会影响调用它的应用程序.
适用于所有正在运行的应用程序的唯一cookie策略是Safari.在app 7调用setCookieAcceptPolicy之前的iOS 7中,它使用了safari策略.因此,如果将safari cookie策略设置为始终阻止,则任何应用程序在设置自己的cookie策略之前将无法使用cookie.我知道自从iOS 7问世以来,这已经导致了很多应用程序的问题.
我的观察是否正确,或者我错过了什么?
编辑
我已经向Apple提出了一个错误,等待现在回复他们.
在分析我的iOS应用程序时,我多次执行一个简单的任务,我从堆栈中推送和弹出视图,然后拍摄快照.每次执行相同的代码,推送的视图只包含一些图像,一旦视图弹出就会被删除.

现在因为几乎一半的快照的持久计数为0,假设没有废弃的内存会安全吗?
我听说持久性计数大于零的行可能是因为某些内部缓存.
我正在使用Xcode 4.2.1,该应用程序正在使用ARC.
编辑:
感谢Kendall Helmstetter Gelner,我设法进一步调试了这个问题.我可能不应该使用模拟器进行调试.我现在在设备上运行它,现在看起来有一个对象没有被释放:

在查看扩展的详细信息视图后,我认为我刚刚找到了问题的原因.
我正在寻找定制我们的iOS应用程序的最佳方法,以便我们可以轻松创建它的白色标签版本并使它们保持同步.
一种方法是将整个代码库放在静态库项目中.然后为我们的主应用程序和每个白标应用程序创建一个单独的项目.这些项目每个都包含对代码库库作为子项目的引用,以及它们自己的资产,如图标,加载图像和Info.plist文件.
我的同事已成功将这种方法用于Eclipse中的Android姐妹项目.
不幸的是,这种方法在xcode中可能不起作用.xcode似乎不允许某些资源与静态库捆绑在一起,比如必须使用的Settings.bundle和Localizable.strings.
有什么方法可以在xcode中使用这种方法,或者我最好只引用每个项目的codebase文件夹?
编辑:
最初我打算只引用每个项目的codebase文件夹,但发现每次在代码库中添加/删除/重命名文件时,这种方法都需要在每个项目中重新添加codebase目录.
我想我在iOS 7模拟器中发现了一个没有出现NSAttributedString的错误.如果其他人可以测试这个以确认它是一个错误,那将是很好的,然后我将向Apple提交一个错误.
问题似乎是NSAttributedString使用NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName的组合.
以下是重现的步骤:
1)在Xcode 5中创建一个新的"单视图应用程序".什么都叫它.
2)在ViewController.m中,将viewDidLoad方法替换为:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
@{NSUnderlineStyleAttributeName:@1,
NSParagraphStyleAttributeName:paragraph}];
UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
myLabel.backgroundColor = [UIColor greenColor];
myLabel.attributedText = attrStr;
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
Run Code Online (Sandbox Code Playgroud)
3)在iOS 7设备上运行,然后在iOS 7模拟器中再次运行它.
4)最后,将部署目标设置为iOS 6并在iOS 6模拟器上运行它.
结果应如下
截图:
iOS7设备
iOS7模拟器

升级到Objective-C ARC(自动引用计数)后,我的代码不再编译并给我这些奇怪的错误:
/Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m
1. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:52:1: current parser token '-'
2. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:1: LLVM IR generation of declaration 'PurchaseThemeOptionVC::viewDidLoad'
3. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:21: LLVM IR generation of compound statement ('{}')
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
我已经多次查看了源文件,但我看不出它有什么问题.
这些错误意味着什么?
ios ×4
ios7 ×2
xcode5 ×2
allocation ×1
cookies ×1
heapshot ×1
instruments ×1
llvm ×1
objective-c ×1
uitableview ×1
visible ×1
xcode ×1
xcode4.2 ×1