我在iOS7中遇到一个问题,普通的UINavigationController推送视图控制器具有UINavigationController导航栏颜色的正确状态栏文本颜色(浅灰色,几乎是白色,因此状态栏文本为黑色).但是,当使用"模态"视图控制器时-presentViewController:animated:completion:,状态栏文本颜色将更改为白色,并且在给定导航栏颜色的情况下很难看到.Navbar颜色在整个应用程序中始终相同,并且不会针对每个视图控制器进行更改.每次-presentViewController通话都会发生这种情况
"查看基于控制器的状态栏外观"设置为YES.
我不知道该尝试解决这个问题.
好的,我有点困惑.
我有一个UIScrollView的子类,这是我尝试像UI元素一样水平滚动"表视图".UIScrollView本身设置它在内部使用的UIGestureRecognizers,它似乎将自己设置为那些UIGestureRecognizers的委托.我在我的水平表元素/单元格上也有自己的UIGestureRecognizer设置,我自己的类设置为我自己的UIGestureRecognizer的委托.由于我的类是UIScrollView的子类,在运行时,UIGcureRecognizer委托调用来到我的类,用于UIScrollView内置的UIGestureRecognizers和我自己的UIGestureRecognizers.有点像PITA,但我们可以通过传递我们不关心的东西来解决这个问题.
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
return NO;
else
{
if ([super respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)])
return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
else
return NO;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是检查[super respondsToSelector:@selector()]返回YES,但是当我实际调用它时,return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];我得到以下异常
2012-08-31 12:02:06.156 MyApp [35875:707] - [MyAppHorizontalImageScroller gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]:无法识别的选择器发送到实例0x21dd50
我本以为应该表明
- [UIScrollView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]
但那可能没问题.但问题是,它说它响应然后不响应.
另外两个UIGestureRecognizer委托例程使用此代码(显然是不同的选择器).
感谢您的任何见解.
delegates objective-c super uigesturerecognizer respondstoselector
在iOS 5上.
我有一个最初放在笔尖中的UILabel元素.我希望x位置保持不变.我希望它采用1行或2行.如果超过两行,则应使用换行符设置来显示省略号.
我用numberOfLines属性和-sizeToFit
如果我将UILabel的numberOfLines属性设置为0,它将正确地看到对于某些文本,没有足够的空间并且在调用之后将其包装到第二行-sizeToFit但是在极少数情况下该行足够长以拉伸到3行,我得到三行,我不想要.如果我将numberOfLines属性设置为2,它实际上将整个东西拉伸到一条线上,并将我在笔尖中设置的初始框架拉长得更宽.
CGRect titleFrame = [[self titleLabel] frame];
[[self titleLabel] setNumberOfLines:0];
[[self titleLabel] setText:newProductTitleText];
[[self titleLabel] sizeToFit];
CGRect newTitleFrame = [[self titleLabel] frame];
Run Code Online (Sandbox Code Playgroud)
CGRect就在那里,我可以在事后计算出事物.因此设置numberOfLines为0有效,并且不会更改框架中的原始origin.x,并且会将长文本分成多行,但不会将其约束为2行.将numberOfLines属性设置为2,当我阅读Apple文档时
此属性控制使用的最大行数,以使标签的文本适合其边界矩形.此属性的默认值为1.要删除任何最大限制,并根据需要使用尽可能多的行,请将此属性的值设置为0.
似乎我应该能够将其设置为两个并仍然有效.我希望sizeToFit在扩展以适应所有文本时在正X和Y方向上扩展,但是当numberOfLines设置为0以外时它在负X方向上扩展.
ETA:"自动调整大小"的struts设置为上部和左侧以将其固定在最小x,y.
感谢您的任何见解.
我正在为我的应用添加应用内购买.我已按照Apple概述的所有步骤(http://developer.apple.com/library/ios/#technotes/tn2259/_index.html特别参见问答#6)以及应用内编程指南.
问题是,当我在测试iPod Touch上发送产品请求时,响应会在invalidProductIdentifiers中显示,而不是有效的产品.
我的应用程序确实有一个特定的非外卡应用程序ID.
我用于签署应用程序的个人资料中明确显示了应用程序ID,并且不使用外卡.
应用内购买项目是标准的非消耗性非订阅项目(启用增强功能).我在商店中将其添加为我的应用程序的应用内商品.它已被准备出售.(处于状态"等待屏幕截图上传").
我从iTunes Connect中复制并粘贴了应用内商品ID并将其粘贴到我的应用中,以确保我没有拼错.
我在StackOverflow上搜索并使用Bing和Google提供有关如何诊断此问题的线索,基本上所有答案都是检查应用ID,项目ID,签名配置文件等.
没有返回错误,产品请求成功完成,因此没有要查询的NSError对象.
如何诊断问题并进行调试?
谢谢
我和朋友正在SpriteKit中对一些东西进行原型设计.这不是我朋友第一次使用它,但这是我的第一次.
我们可以简单地控制正方形.您可以在"地面"节点上来回运行,您可以触摸跳转按钮以"跳转".
对于质量,重力等给定的一组数字,如下
[self.physicsBody applyForce:CGVectorMake(0, 1500000)];
Run Code Online (Sandbox Code Playgroud)
在iPhone模式下在iPad4上运行时会导致正常的跳跃(几乎是一个小的兔子店)(应用程序现在只是iPhone),但在我的5S上跳跃大约高出20到40倍,在4S上跳跃就像高出100或200倍.("时间更高"是基于视觉观察的猜测,但iPad看起来很正常,5S看起来像超人跳跃,而4S看起来像超人吃了他的菠菜,他的妻子在跳之前就把它拿出来了)
所有设备上都运行完全相同的代码.我不确定在哪里看或者可能导致这种情况.
我正在使用Apple建议的交易VerificationController代码更新我的iOS应用,以验证应用内购买,因为最近发布的"黑客"允许人们购买in-ap购买而无需付费,因为来自欺骗性Apple服务器的欺骗收据.
我已将所有内容集成在一起,现在正在测试.我已经多次运行应用程序并且验证内容已经运行了好几次.
我想测试有关购买的所有内容,包括从全新的应用程序和AppleID开始.所以我完全删除了我的测试设备上的应用程序.我在iTunes Connect中创建了一个全新的"测试用户"AppleID.我转到测试设备上的"设置"应用,转到"存储",然后将设备的默认AppleID更改为此新创建的AppleID.
我使用调试器从Xcode重新运行应用程序,该应用程序将应用程序重新安装到测试设备上并重新运行.
问题是,几乎在发布时,测试设备会立即发出AppleID密码警报类型视图,并询问我最初用于测试所有内容的旧AppleID的密码,包括原始的应用程序内购买和验证.它不会要求在商店下的"设置"应用中设置的新设备AppleID的密码.
当我将它作为一个新应用程序运行时,验证代码不会运行,并且除了单独运行之外,没有任何代码可以运行任何与Apple StoreKit相关的任何例程
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
Run Code Online (Sandbox Code Playgroud)
(observer是我的StoreKit东西的委托对象并且被创建但是没有例程在运行,除了init和init什么都不做,除了为自己设置一个静态变量来创建一个单例类型类)
为了检查目的,我也加入了
NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]);
Run Code Online (Sandbox Code Playgroud)
这显示没有旧的交易闲置.
我不知道为什么它在新安装App时开始要求我的原始测试用户的AppleID,设备的商店的AppleID是不同的,我可以识别没有运行的代码访问StoreKit(除了上面提到的).
任何对此的见解将不胜感激.
ETA:在密码对话框中触摸取消不会导致在应用程序中运行任何额外的代码,也不会阻止应用程序运行.
如果我然后进入应用程序内购买屏幕(应用程序在商店中查询可用的应用程序内购买),它会在旧AppleID上以相同的方式再次询问密码.我可以取消,似乎没有任何事情发生.如果我实际触摸了我的应用中的"恢复购买"按钮,则会在商店设置中设置新AppleID上的密码.我没有超越这一点,因为我想了解发生了什么,并且不希望通过在新的AppleID下完成/尝试恢复或购买来搞砸.
谢谢
我的 iOS 应用程序有一个视图控制器,用于显示收件箱项目列表。NSFetchedResultsController这些收件箱项目是核心数据数据库中的实体,并且通过使用主线程管理上下文( )在视图控制器中管理列表NSMainQueueConcurrencyType。
除了 之外NSFetchedResultsController,对实体的所有访问都仅限于在具有私有上下文的专用 GCD 调度队列上运行的代码。因此,在实体中设置属性值以及读取这些实体属性值都发生在这个专用的 GCD 队列和上下文上。
视图控制器监视NSFetchedResultsController主线程上下文中的变化。更改发生在后台专用队列和上下文上。代码监视NSManagedObjectContextDidSaveNotification通知,当后台线程更新属性值时,这些更改将被推送到主线程上下文中。
NSFetchedResultsController 设置为对两个排序描述符进行排序,“sortScore”和“date”(现在只有其中一个正在更新,“date”,因此每个托管对象实例都具有相同的“sortScore”,不是吗?影响排序。)
当“日期”发生更改时,会NSFetchedResultsController注意到它并发布更改,但它将其发布为“更新”而不是“移动”,因此排序不会根据排序描述符和“ date”的更新方式使得新值应该落在排序中的其他位置。
经过几个小时的工作和跟踪NSManagedObjectContextDidSaveNotification以及所有其他可能发生故障的点之后,我对为什么获取的结果控制器发送“更新”更改而不是“移动”更改感到茫然。
此应用程序使用 Robbie Hanson XMPPFramework 的旧分叉版本来管理核心数据(以防熟悉)。
(使问题更加复杂的是,昨晚它确实起作用了,并且移动是在一次运行中发生的。我删除了该应用程序并从全新安装开始,它开始工作。但后续运行不起作用并删除该应用程序以启动fresh 并没有解决这个问题,因此 start fresh 的效果可能是巧合。)
我使用了日志记录和断点来显示获取的结果控制器正在发送“更新”而不是“移动”。
这是代码。
设置并进行初始设置,NSFetchedResultsController并在视图控制器的 init 内部调用此 create 方法。
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;
- (NSFetchedResultsController *)createFetchedResultsControllerUsingStorage:(XMPPCoreDataStorage *)storage entityName:(NSString *)entityName
{
NSManagedObjectContext *context = [storage mainThreadManagedObjectContext];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entityName];
NSSortDescriptor *sortDescriptorScore = [[NSSortDescriptor alloc] initWithKey:@"sortScore" ascending:NO];
NSSortDescriptor *sortDescriptorDate …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我试图帮助走出门.此代码最初是由另一个团队用iOS5编写的.我添加了requestAccessToEntityType:completion:成功运行的调用.但是,在被授予访问权限后,我没有基于实体的source/defaultCalendar或日历.我无法创建新日历.
调用defaultCalendarForNewEvents时出现此错误
Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)" 结果是零.
如果我退出viewController尝试执行此操作并返回,则一切正常.如果在收到关于无源的警报后,我继续尝试(没有退出viewController),它反复失败.
我想强调的是,授权调用有效(要求用户访问日历并提供日历,以及稍后调用以确认授权通过).我发现的所有其他问题都是类似的解决方案 - 确保你requestAccessToEntityType
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted)
{
//[self performSelectorOnMainThread:@selector(doScheduleActivity:) withObject:activity waitUntilDone:YES];
dispatch_async(dispatch_get_main_queue(), ^{
[self doScheduleActivity:activity];
});
}
else
{ // probably should force the main thread
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Calendar Access Required" message:@"In order to schedule activities, APP needs access to your Calendar. You can change this in your device Settings." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[av …Run Code Online (Sandbox Code Playgroud) 我的状态栏有问题.这是一个iPhone应用程序,而不是iPad应用程序.我想在应用程序的任何地方都有一个黑色半透明状态栏.
我已经设定在应用程序的plist状态栏样式.它设置为黑色半透明.
我的理解是,当设置它时,所有视图的布局将从0,0而不是0,20开始,就像你有一个不透明的状态栏一样.这就是为什么IB允许您选择指定您将使用哪种状态栏的提示,以便它可以模拟它并在IB中正确显示它.(是的,我在IB中的所有视图都设置为显示黑色半透明状态栏).布局从0,0完成,因此状态栏将覆盖您的视图以显示内容.在IB中它工作正常.但在我的应用程序中却没有.
我的应用程序是一个基于标签栏的应用程序,只有其中一个视图看起来正确,即使它们都设置相同.为了使这一个视图起作用,我必须将背景视图图像设置为0,-20,并将主视图设置为NOT剪辑子视图.所以看起来黑色半透明的布局不能正常工作.此外,我所有其他标签视图的设置方式相同,不是剪辑子视图,主背景视图设置为0,-20.但只有在第一个标签中,这实际上"工作".
这是一些图片:
它应该如何(但仍然必须将背景设置为0,-20):

另一个选项卡具有完全相同的设置,如下所示: 
为了确保它是一个没有叠加背景的blacl半透明状态栏,我尝试了它没有背景: 
和替代背景(替代是直蓝色,而不是轻微的拉丝效果): 
因为所有三个不工作的例子(没有背景,实际和替代)的状态栏看起来完全相同,我假设状态栏是正确的排序,黑色半透明,但没有任何背后显示.
我的几个选项卡都有这个问题,并且带有导航控制器的选项卡中循环的所有视图都有这个问题.并且它们都设置为"工作"选项卡,其中"剪辑子视图"设置为NO,背景的原点设置为0,-20
我认为"工作"不起作用,但看起来好像是由于背景视图中的负偏移.我认为它实际应该设置为0,0并且工作.但主要的IB提供的视图的原点设置为0,20并且它是灰色的,所以我无法改变它.
此外,我在一个选项卡上有另一个问题,一个设置选项卡,我使用不同的外观(更多iPhone看),黑色半透明甚至没有生效.我从一个以编程方式构建的视图开始,它显示一个灰色状态栏:

钻取到nib支持的视图,它们看起来一样:
并且这些视图被布置为好像它是一个灰色状态栏,下降20像素(在IB中它们被设置为黑色半透明,所以我将它们放置了20像素更高)
我已尝试以编程方式设置状态栏样式以及app plist条目,但它没有任何效果(在任何这些选项卡上).
几个星期以来,我一直在研究这个问题(Google,stackoverflow,apple.com).但没有发现我应该做什么的迹象.
ETA: wantsFullScreenLayout解决了其中一个问题,所以我将其标记为已解决.我已经针对最初提出的两个问题中的一个问题更新了一个新问题,包括新的图片,描述等以及更适用的标题,因为问题不是uistatusbar本身.新问题出现了
新问题
我有一个包含子项目的项目.子项目具有Core Data模型并生成.momd"bundle".我需要将.momd包包含在构建项目时生成的主项目应用程序包中..momd文件已生成,并且位于构建目录中,但我无法看到如何将其包含在最终的应用程序包中.
我可以将.momd添加为"复制包资源"中的文件(通过向我的支持文件组中的主项目添加对它的引用),但由于.momd不是Finder级别包,因此将其添加为目录和.momd内容被复制到应用程序包中,但不会复制到.momd文件夹本身,因此系统在应用程序运行时无法找到它.
ios ×6
iphone ×3
core-data ×2
storekit ×2
delegates ×1
ekeventstore ×1
in-app ×1
ios4 ×1
ios5 ×1
ios6 ×1
ios7 ×1
layout ×1
objective-c ×1
sizetofit ×1
sprite-kit ×1
statusbar ×1
super ×1
text-size ×1
translucency ×1
uilabel ×1
uistatusbar ×1
xcode4 ×1