小编Nik*_*rov的帖子

我应该何时验证应用内购买交易收据?

我的意思是,我的步骤应该是什么?

1)得到SKPaymentTransactionStatePurchased

2)从SKPaymentQueue中删除它并提供内容[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

3)验证收据然后,如果它无效,则阻止我刚刚提供的内容

或者我应该将第二步改为第三步?

1)得到SKPaymentTransactionStatePurchased

2)验证收据然后,如果它无效,则不提供内容

3)SKPaymentQueue无论如何都要将它取下[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

在第一种情况下,用户可以在购买后立即关闭互联网,因此我将无法验证收据.但是在第二步中,在步骤1和步骤2之间可能会出现一些互联网问题,所以我不会完成交易,也不会提供内容,这将是糟糕的用户体验.

那你选择了什么样的应用程序?为什么?

我的选择

我选择了第二种情况,因为选择第一种方案会让我的应用程序很容易被iAP Cracker破解.

security user-experience storekit in-app-purchase ios

19
推荐指数
2
解决办法
5058
查看次数

Haskell替换列表中的元素

是否有任何内置函数来替换haskell中给定索引处的元素?

例:

replaceAtIndex(2,"foo",["bar","bar","bar"])

应该给:

["bar", "bar", "foo"]
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建自己的功能,但它似乎应该是内置的.

haskell built-in

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

不要备份到iCloud但仍然拒绝

在我的应用程序中,我必须存储核心数据数据库和音频文件,所以我解码将它们放在Documents目录中.为了防止它们备份,当我第一次启动应用程序时,我把这样的Do not BackUp标志

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
}
    - (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
  if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
  } else { // iOS >= 5.1
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; …
Run Code Online (Sandbox Code Playgroud)

storage objective-c app-store ios icloud

16
推荐指数
1
解决办法
6601
查看次数

无法在iOS中开始接收远程控制事件

在我的应用程序中,我希望让用户在后台控制音频播放.我在.plist中设置了backGround模式,在bg中播放就像我想要的那样.但是我无法通过触摸控制按钮得到任何响应.

我设置了AudioSession这样的

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)

然后,在我放置播放器的viewContoller中,我beginReceivingRemoteControlEvents喜欢这个

 if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    [self becomeFirstResponder];
    NSLog(@"Responds!");
}
Run Code Online (Sandbox Code Playgroud)

它打印出来 Responds!

但问题是这种方法永远不会被调用

    - (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
    NSLog(@"Where is my event?");
    if(event.type == UIEventTypeRemoteControl)
    {
        switch (event.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                NSLog(@"Pause");
                [self playWords:playButton];
                break;
            case UIEventSubtypeRemoteControlNextTrack:
                NSLog(@"Next");
                [self next];
                break;
            case UIEventSubtypeRemoteControlPreviousTrack:
                NSLog(@"Prev");
                [self prev];
                break;

        }
    }
Run Code Online (Sandbox Code Playgroud)

我甚至尝试写一个类别UIApplication让它成为第一个响应者,但它没有帮助

@implementation UIApplication (RemoteEvents)
-(BOOL)canBecomeFirstResponder
{
    return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

解决方案 …

background objective-c remote-control avaudioplayer ios

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

ios中的SSIDDATA包含什么

我正在使用以下代码来获取我的ios设备连接的WIFI.我想知道SSIDDATA包含哪些数据以及如何读取此数据.

    -(id)fetchSSIDInfo
    {
    NSArray *ifs = (__bridge NSArray *)(CNCopySupportedInterfaces());
    NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
    id info = nil;
        for (NSString *ifnam in ifs) {
        info = (__bridge id)(CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam));
        NSLog(@"%s: %@ => %@", __func__, ifnam, info);
        if (info && [info count]) {
            break;
        }
        }
    return info;
}
Run Code Online (Sandbox Code Playgroud)

iphone ios4 ios ios5 ios6

8
推荐指数
1
解决办法
1897
查看次数

更改UIRefreshControl转到UIControlEventValueChanged所需的路径

我试图添加UIRefreshControl到我的UIScrollView,但问题是它的面积太小,所以用户几乎不可能达到所需的水平.

那么有没有办法触发此控件的状态或更改所需拉动手势的长度?

我知道,这种控制是新的,可能没有直接的方法来实现这一点,但也许有人找到了黑客?

uiscrollview uiview ios ios6 uirefreshcontrol

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

为什么UIGraphics.GetCurrentContext会返回null?

我有一个UIViewController包含2个子视图(从UIView派生的类),使用UIGraphics.GetCurrentContext进行自定义绘图.绘图在应用程序启动时工作正常.我在视图控制器的ViewDidLoad()中连接子视图,如下所示:

DigitalNumberView dnv = new DigitalNumberView();  
dnv.Frame = new System.Drawing.RectangleF(10, 10, 750, 190);  
View.AddSubview(dnv);

CircleView tuner = new CircleView(dnv);  
tuner.Frame = new System.Drawing.RectangleF(570, 220, 190, 190);  
View.AddSubview(tuner);
Run Code Online (Sandbox Code Playgroud)

我需要第一个子视图来绘制自定义内容,具体取决于第二个子视图的功能.当第二个子视图获得TouchesEnded时,我在第一个子视图中调用一个显示新数据的函数.第一个子视图中的绘图使用UIGraphics.GetCurrentContext,它在此特定工作流中变为null.以下是它如何绘制的示例:

SetNeedsDisplay();  
CGContext context = UIGraphics.GetCurrentContext ();  
if (null == context) {  
    Console.WriteLine("Retrieved null CGContext");  
    return;  
}  
RectangleF r = new RectangleF(25, 10, 180, 180);  
ClearNumber(context, r);  
DisplayNumber(context, f, r);  
UIGraphics.EndImageContext();
Run Code Online (Sandbox Code Playgroud)

为什么UIGraphics.GetCurrentContext仅在此工作流程中返回null,但在启动时不返回?还有另一种方法可以达到同样的效果吗?我只是错过了一些东西吗?

drawing xamarin.ios

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

核心数据搜索不同的enteties

我在我的应用程序中使用搜索控制器.用户输入一个单词,然后返回一个核心数据实体列表,其中每个实体都有一个包含该单词的标题.这很简单.

但我还想在此列表的底部返回其他实体,这些实体将搜索词作为其标题,并且与我首先搜索的那些实体存在多种关系.

因此,如果我在标题中找不到搜索词,我想搜索与第一个实体类型相关的实体的标题.

这可能只有一个NSPredicate吗?

这是我的核心数据模型

代码数据模型图

search core-data ios

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

数据导入后,FetchedResultsController没有看到managedObjectContext中的更改

我在我的应用程序中处理数据导入部分,为了使UI更可靠,我按照Marcus Zarra的文章 http://www.cimgf.com/2011/08/22/importing-and-displaying-large -data集合核-数据/

我们的想法是你在后台的单独上下文中导入(我使用GCD),你的fetchedResultsController的上下文通过观察NSManagedObjectContextDidSaveNotification来合并更改.

我得到的问题对我来说很奇怪 - 我的fetchedResultsController没有获得那些更改,并且在新数据到来时不会重新加载TableView.但是,如果我触发以下方法,这使得获取和重新加载表 - 它在那里得到它.

- (void)updateUI
{                                         
  NSError *error;
  if (![[self fetchedResultsController] performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
  }
  [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

所以现在我调用那个方法,当我得到NSManagedObjectContextDidSaveNotification使它工作,但它看起来很奇怪和讨厌我.

 - (void)contextChanged:(NSNotification*)notification
{
  if ([notification object] == [self managedObjectContext]) return;

  if (![NSThread isMainThread]) {
    [self performSelectorOnMainThread:@selector(contextChanged:) withObject:notification waitUntilDone:NO];
    return;
  }

  [[self managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
  //TODO:Make it work as it should - merge, without updateUI
   [self updateUI];//!!!Want to get rid of this!
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?以下是负责解析数据和添加Observer的代码.

- (void)parseWordsFromServer:(NSNotification …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nsfetchedresultscontroller nsmanagedobjectcontext ios

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

在Objective-C中,为什么必须为@property重复变量的类型?

对于Objective-C,在以下头文件中:

@interface Peg : NSObject {
    char color;
}

@property char color;
Run Code Online (Sandbox Code Playgroud)

我想知道成员变量是否已经被称为char类型,那为什么@property必须重复它?(否则它不会编译).编译器不能告诉它是char吗?它不可能是其他任何东西,不是吗?

properties objective-c

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

SKPaymentTransaction expires_date,似乎“自动续订”机制在沙箱中不起作用

我几乎已经在我的应用程序中管理了自动续订订阅,但发生了一件奇怪的事情 - 它不会自动续订。

我有一个按钮,它在我的产品中添加了 SKPayment,并为我提供了带有 SKPaymentTransaction 的收据,这非常活跃。

然后我保存该收据并尝试再次将其发送给Apple以检查过期日期。它会返回我第一次购买的日期,而不是最后一次购买的日期expiredate。当订阅期结束时(在沙盒中的五分钟内) ),它只返回我 21002

但是,如果我再次手动续订,新收据会为我提供更新的到期日期,我再次保存它,一切都会顺利进行。

是的,original_purchase_date这两个接待都是一样的。

也许我只是不明白,检查过期日期是如何工作的?

sandbox objective-c storekit in-app-purchase ios

0
推荐指数
1
解决办法
1898
查看次数

UISearchBar键盘外观

根据这个问题,我们可以在iOS中更改任何UITextField的键盘外观可以将警报键盘用于iOS上的任何文本字段吗?

但是UISearchBar怎么样?有没有办法,因为[searchBarInstance setKeyboardAppearance:UIKeyboardAppearanceAlert];不起作用,因为UISearchBar缺乏这种方法.

iphone keyboard uisearchbar ios

0
推荐指数
1
解决办法
1218
查看次数