我的意思是,我的步骤应该是什么?
1)得到
SKPaymentTransactionStatePurchased
2)从SKPaymentQueue中删除它并提供内容
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
3)验证收据然后,如果它无效,则阻止我刚刚提供的内容
或者我应该将第二步改为第三步?
1)得到
SKPaymentTransactionStatePurchased
2)验证收据然后,如果它无效,则不提供内容
3)
SKPaymentQueue
无论如何都要将它取下[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
在第一种情况下,用户可以在购买后立即关闭互联网,因此我将无法验证收据.但是在第二步中,在步骤1和步骤2之间可能会出现一些互联网问题,所以我不会完成交易,也不会提供内容,这将是糟糕的用户体验.
那你选择了什么样的应用程序?为什么?
我的选择
我选择了第二种情况,因为选择第一种方案会让我的应用程序很容易被iAP Cracker破解.
是否有任何内置函数来替换haskell中给定索引处的元素?
例:
replaceAtIndex(2,"foo",["bar","bar","bar"])
应该给:
["bar", "bar", "foo"]
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建自己的功能,但它似乎应该是内置的.
在我的应用程序中,我必须存储核心数据数据库和音频文件,所以我解码将它们放在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) 在我的应用程序中,我希望让用户在后台控制音频播放.我在.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)
为什么会这样?
解决方案 …
我正在使用以下代码来获取我的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) 我试图添加UIRefreshControl
到我的UIScrollView
,但问题是它的面积太小,所以用户几乎不可能达到所需的水平.
那么有没有办法触发此控件的状态或更改所需拉动手势的长度?
我知道,这种控制是新的,可能没有直接的方法来实现这一点,但也许有人找到了黑客?
我有一个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,但在启动时不返回?还有另一种方法可以达到同样的效果吗?我只是错过了一些东西吗?
我在我的应用程序中使用搜索控制器.用户输入一个单词,然后返回一个核心数据实体列表,其中每个实体都有一个包含该单词的标题.这很简单.
但我还想在此列表的底部返回其他实体,这些实体将搜索词作为其标题,并且与我首先搜索的那些实体存在多种关系.
因此,如果我在标题中找不到搜索词,我想搜索与第一个实体类型相关的实体的标题.
这可能只有一个NSPredicate吗?
这是我的核心数据模型
我在我的应用程序中处理数据导入部分,为了使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
对于Objective-C,在以下头文件中:
@interface Peg : NSObject {
char color;
}
@property char color;
Run Code Online (Sandbox Code Playgroud)
我想知道成员变量是否已经被称为char类型,那为什么@property
必须重复它?(否则它不会编译).编译器不能告诉它是char吗?它不可能是其他任何东西,不是吗?
我几乎已经在我的应用程序中管理了自动续订订阅,但发生了一件奇怪的事情 - 它不会自动续订。
我有一个按钮,它在我的产品中添加了 SKPayment,并为我提供了带有 SKPaymentTransaction 的收据,这非常活跃。
然后我保存该收据并尝试再次将其发送给Apple以检查过期日期。它会返回我第一次购买的日期,而不是最后一次购买的日期expiredate
。当订阅期结束时(在沙盒中的五分钟内) ),它只返回我 21002
但是,如果我再次手动续订,新收据会为我提供更新的到期日期,我再次保存它,一切都会顺利进行。
是的,original_purchase_date
这两个接待都是一样的。
也许我只是不明白,检查过期日期是如何工作的?
根据这个问题,我们可以在iOS中更改任何UITextField的键盘外观可以将警报键盘用于iOS上的任何文本字段吗?
但是UISearchBar怎么样?有没有办法,因为[searchBarInstance setKeyboardAppearance:UIKeyboardAppearanceAlert];
不起作用,因为UISearchBar缺乏这种方法.
ios ×9
objective-c ×5
core-data ×2
ios6 ×2
iphone ×2
storekit ×2
app-store ×1
background ×1
built-in ×1
drawing ×1
haskell ×1
icloud ×1
ios4 ×1
ios5 ×1
keyboard ×1
properties ×1
sandbox ×1
search ×1
security ×1
storage ×1
uiscrollview ×1
uisearchbar ×1
uiview ×1
xamarin.ios ×1