小编Wil*_*ill的帖子

iOS StoreKit - 何时调用 - (void)restoreCompletedTransactions?

我在我的应用程序中有很多一次购买IAP.用户可以很好地购买它们.

我的问题是,我与乱舞整合追踪真正的购买与只是一个购买的恢复,但我SKPaymentTransactiontransactionState总是回来的SKPaymentTransactionStatePurchased,而不是SKPaymentTransactionStateRestored.

显然SKPaymentTransactionStateRestored只会在- (void)restoreCompletedTransactions何时调用,但何时调用此方法?

我的思维过程是购买应该是这样的:1)用户选择产品,2)询问用户是否想购买X数量的产品.3)服务器检查用户之前是否购买过,以及是否已通过设置恢复SKPaymentTransactionStateRestored.否则,处理事务并设置SKPaymentTransactionStatePurchased.显然这是错的,我想- (void)restoreCompletedTransactions在两者之间的某个地方打电话???

谢谢,

objective-c storekit ios

9
推荐指数
2
解决办法
5476
查看次数

如何检测NSTableView行已被选中?

我有NSTableView很多行,用户可以选择.当用户选择一行时,我得到了

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row
Run Code Online (Sandbox Code Playgroud)

NSTableViewDelegate方法调用,这太棒了.当用户单击该行时,我会突出显示该行.

然而,问题是,当用户再次"选择"该行时,我没有再次获得委托调用(不取消选择行或选择另一行).

例如,用户单击某一行并加载某些文件.如果用户要再次选择该行,我想刷新加载的文件.但是,我没有第二次用户点击该行.

一个选项是取消选择行,但我需要保持选择,以便用户知道他们选择了哪个选项.

是否有一个我错过的委托方法告诉我何时选择了一行(或点击了它)?

提前致谢!

cocoa objective-c nstableview

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

Google Drive iOS SDK:获取用户空间

我正在构建一个使用Google Drive iOS SDK将文件上传到用户的Google云端硬盘帐户的应用.由于正在上传的文件的大小,我想知道用户使用了多少空间并且可用.例如,我计划在我的应用程序中有一个标签,显示用户当前正在使用10gb/100gb.

我猜可能有办法从初始登录中获取此信息,但我希望能够即时获取此信息.

提前致谢!

objective-c ios google-drive-api

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

将NSData转换为CGImage然后再转换回NSData会使文件太大

我用相机制作了相机AVFoundation.

一旦我AVCaptureStillImageOutput完成了它的captureStillImageAsynchronouslyFromConnection:completionHandler:方法,我就像这样创建一个NSData对象:

         NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
Run Code Online (Sandbox Code Playgroud)

一旦我有了这个NSData对象,我想将图像 - 不用 - 转换为a UIImage.我发现我可以转换成a CGImage来这样做.

在我拥有imageData之后,我开始转换为CGImage的过程,但我发现CGImageRef最终比NSData对象大三十倍.

下面是我用来转换为代码CGImage来自NSData:

CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)(imageData));
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
Run Code Online (Sandbox Code Playgroud)

如果我尝试NSLog超出图像的大小,当它NSData是一个1.5-2兆字节的图像时,它会达到30兆字节!

size_t imageSize = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef);

    NSLog(@"cgimage size = %zu",imageSize);
Run Code Online (Sandbox Code Playgroud)

我想也许当你从NSData转到CGImage时,图像会解压缩,然后如果我转换回NSData,它可能会回到正确的文件大小.

imageData = (NSData *) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
Run Code Online (Sandbox Code Playgroud)

以上与对象NSData相同.lengthCGImageRef

如果我尝试保存图像,则图像是无法打开的30mb图像.

我对使用CGImage完全不熟悉,所以我不确定我是从NSData转换为CGImage还是错误地返回,或者我是否需要调用某种方法再次解压缩.

提前致谢,

objective-c cgimage nsdata ios cgimageref

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

iOS 5 - AFNetworking - 上传视频

对于我的应用程序,用户将能够录制视频或从他们的相册中选择视频,并通过php脚本将视频文件上传到服务器.要将文件上传到服务器,我正在使用AFNetworking.我最初试图从相册上传视频,但由于我无法上传,我在主套装中添加了一个视频(我知道通过我为php脚本制作的html前端上传得很好).

代码是:

NSString *vidURL = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mov"];
    NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:vidURL]];

    NSLog(@"The test vid's url is %@.",vidURL);

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL fileURLWithPath: @"http://www.mywebsite.com"]];

    NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload.php" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) 
    {
        [formData appendPartWithFileData:videoData name:@"file" fileName:@"test.mov" mimeType:@"video/quicktime"]; 
    }];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];

    [operation setUploadProgressBlock:^(NSInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite) 
    {

        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);

    }];

    [operation start];
Run Code Online (Sandbox Code Playgroud)

我的PHP脚本运行正常,因为我可以通过HTML表单上传相同的视频.但是,上面的代码无法访问setUploadProgressBlock.

有什么东西对任何人来说都是破碎的,还是有其他我想念的东西?

提前致谢

iphone upload ios5 afnetworking

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

NSDateFormatter不会格式化奇怪的日期字符串

所以我收到的日期字符串如下所示:"2013-03-20T21:13:26-7:00",我从网络后端收到.我无法控制后端,只是一个fyi.

我的偏好是将日期格式化为:3月20日晚上9:13.

当我做以下

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *date  = [dateFormatter dateFromString:@"2013-03-20T21:13:26-7:00"];
Run Code Online (Sandbox Code Playgroud)

date 一片空白.

我的第一个想法是日期字符串看起来很奇怪,也许我应该删除T和"-7:00",因为"-7:00"会附加到我收到的每个日期,我不知道是什么那是为了.

即使在字符串看起来像@"2013-03-20 21:13:26"之后,date仍然是空的.

我承认我不是格式化日期的专家,所以如果我能在这个问题上得到一些帮助,那就太好了.

提前致谢!

date objective-c nsdate nsdateformatter ios

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

iOS 5 - ALAssets库 - 将视频的URL从资源转换为NSDATA文件

所以我有一个应用程序,允许用户录制视频或从他们的照片库中选择视频,然后将视频上传到服务器.录制视频后,我获得了资产的URL.

我尝试使用以下代码将NSData设置为assetURL:

NSString *vidString =[NSString stringWithFormat:@"%@",savedVideoURL];
NSURL *vidURL = [NSURL URLWithString:vidString];
NSData *videoData = [NSData dataWithContentsOfURL:vidURL];
Run Code Online (Sandbox Code Playgroud)

savedVideoURL是录制期间获得的资产URL.资产URL看起来像这样:assets-library://asset/asset.MOV?id=6EB7A04D-3DF8-44E5-A6D8-FD98461AE75E&ext=MOV

当我尝试将NSData设置为该URL时,NSData仍然等于nil.

我无法使用以下解决方案:从ALAsset url iOS获取视频NSData

有没有其他人知道将NSData设置为该资产的URL的方法?

提前致谢!

video assets alassetslibrary ios5

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