我的应用程序正在接收从服务器发送到苹果后端的APN。 一旦通知到达用户的设备,用户自然就不能打开该应用。 在此期间,我的服务器可能会推送更多通知。 它们都包含一些用户数据,这些数据在处理通知时很重要。 那么如何处理呢? iOS不会捆绑和给我一批,是吗? 以下是我将如何解决这个问题的方法,其中没有一个是简单的。 服务器跟踪没有看到的数据,并在到达一个新的请求时,总是发送一批所有新的通知,反映计数作为徽章计数。 通过录制通知popup窗口打开客户端。 在这种情况下,它具有didReceiveRemoteNotification所有需要的数据。 要么 客户端忽略通知popup窗口并通过点击应用程序图标打开应用程序(可能稍后)。 在这种情况下, didReceiveRemoteNotification不会被调用,因此应用程序必须从服务器获取所有需要的数据。 要么 服务器永远不会发送任何用户数据,客户端每次启动或检索didReceiveRemoteNotification中的数据时都会检查新的东西。 还要别的吗? 更简单的我失踪了?
我知道你可以select使用if语句与UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad iPad或iPhone。 但我想知道如果你可以做同样的iPhone 3.5英寸的屏幕iPhone 4英寸的屏幕。 我有一个游戏,最初是为iPhone 4英寸的屏幕devise的,但是自动布局已经被用于修复这两个设备之间的错误,我需要改变的一件事是,当 if (ball.center.y > 600) { RandomPosition = arc4random() %248; RandomPosition = RandomPosition + 36; ball.center = CGPointMake(RandomPosition, -22); } 因为它最初是在4英寸的屏幕上devise的,所以游戏被设置为将球重置到屏幕的顶部,当它大于600像素时,就在iPhone 4英寸屏幕的下方。 它仍然正常工作,3.5英寸的屏幕底部和位置的重置之间只是有点延迟。 有无论如何,我可以build立一个UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom(iphone4???)语句与UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom(iphone4???)build立一个新的ball.center.y> 300什么的?
我有一个Facebook SSO使用Facebook Objective-C SDK的最新版本在我的应用程序上完美工作。 如果用户做“某事”,我需要在应用程序内部请求一个额外的权限。 如果用户之前给了我这个权限,我不需要这个权限,所以我想在Facebook SDK中应该有一个方法 -(BOOL) checkPermission:(NSString*) permission; 所以我可以像这样使用它: if( [facebook checkPermission:@"email"] ) { 有没有办法做到这一点?
我想创build一个notifciation每当新的一天发生在本地(使用应用程序,或者如果它发生在启动之间)发生。 我想知道什么可能是观察这一变化的最好方法。
我正在用Visual Studio 2013 CE开发Xamarin.Forms应用程序(可移植类库项目)。 首先我关注iOS版本。 现在我正在考虑如何使应用程序多语言。 我刚刚阅读了关于它的官方Xamarin文档,但我意识到,这个解决scheme只采用目标设备的系统语言。 在便携式类库中,我有一个有三种语言的资源文件夹:德语(默认),英语和法语。 Resource.resx Resource.en-US.resx Resource.fr-FR.resx Resource.Designer.cs 现在我刚刚创build了一个静态设置类,如下所示: public static class Settings { public static Dictionary<String, CultureInfo> Languages = new Dictionary<String, CultureInfo> { { "German", new CultureInfo("de-DE") }, { "English", new CultureInfo("en-US") }, { "French", new CultureInfo("fr-FR") } }; public static CultureInfo CurrentCulture = Languages["German"]; public static CultureInfo CurrentUiCulture = […]
我试图了解何时调用autorelease,以及这将实际做我的对象。 在阅读关于 Mac开发者库中关于内存pipe理的内容之后,我明白当你有一个充当工厂方法的方法时 – 通过创build一个新的对象并返回它 – 在返回对象之前,该方法没有办法释放对象,导致返回一个释放的对象。 例 – (Test *) createNewTest { Test *newInstance = [[Test alloc] init]; [newInstance release]; return newInstance; // deallocted object returned. } 相反,我应该使用autorelease : 由NSObject定义的autorelease方法标记接收器以供以后发布 我的问题是:如果稍后要发布对象,我怎么知道它被释放的时间? – (Test *) createNewTest { Test *newInstance = [[test alloc] init]; [newInstance autorelease]; return newInstance; } – (void) runIt { Test *myInstance = […]
我正尝试使用AVAssetWriter从图像创buildvideo。 大部分时间,实现的代码都能正常工作,但是在随机时刻,作者有问题 AVAssetWriter *videoWriter; … [videoWriter finishWriting]; NSLog(@"videoWriter error %@",videoWriter.error); 收到的错误是: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1f839cd0 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1e59efb0 "The operation couldn't be completed. (OSStatus error -12633.)", NSLocalizedFailureReason=An unknown error occurred (-12633)} 写图片: -(void)writeFrame:(WriteableFrame*)wF { if([writerInput isReadyForMoreMediaData]) { CMTime presentTime = CMTimeMake(wF.frameTime, 1000); CGImageRef tmpImgRef = […]
在Objective-C中使用emums是否正确(或甚至是有效的方法)? 即没有使用menuItem,但只是定义了一个列表add = 1,load = 2,list = 3等 enum menuItems { add = 1 , save , load , list , removeAll , remove , quit }; int optionSelect; scanf("%d", &optionSelect); switch (optionSelect) { case add: //… break; } 欢呼声gary
有人能告诉我之间的区别吗? @property (nonatomic, weak) id delegate; @property (nonatomic, weak) id <protocol_name> delegate; @property (nonatomic, weak) UIViewController * <protocol_name> delegate;
使用下面的行, [fileManager copyItemAtPath:sourcePath toPath:targetPath error:&error]; 我们可以复制一个文件夹,但如果该文件夹已经存在,则会抛出一个“File Exists”exception。 为了覆盖单个文件,我们可以通过以下几行来实现: NSData *myData = [NSData dataWithContentsOfURL:FileURL]; /fetch single file [myData writeToFile:targetPath atomically:YES]; 但我想复制一个已经存在的文件夹,即覆盖 。 编辑 :简单的可能性,我可以在复制它们之前删除项目。 请提出更多的可能性。