很抱歉这个简单的问题,但我正在度假阅读一本关于核心音频的书,并没有我的C或Objective C书籍...
这个变量定义中的花括号是什么?
MyRecorder recorder = {0};
Run Code Online (Sandbox Code Playgroud) 对不起,我不确定这里是否使用正确的语言,但是当调用方法因为它们是委托方法,或者因为被列为观察者目标而调用的方法时,它们是否在主线程上执行?
我想知道我是否可以在这些方法中进行UI更改,或者我是否必须将它们包装起来
dispatch_async(dispatch_get_main_queue(), ^{ UI stuff });
Run Code Online (Sandbox Code Playgroud)
TIA:约翰
我的应用将视频上传到Facebook.即使不耐烦的用户在上传过程中点击"主页"按钮,我也希望在后台完成上传.
经过一番阅读,我试过这个:
UIBackgroundTaskIdentifier bti = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bti];
}];
[fb requestWithGraphPath:@"me/videos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
[[UIApplication sharedApplication] endBackgroundTask:bti];
Run Code Online (Sandbox Code Playgroud)
这项工作是用fb请求方法完成的.视频通过http连接上传到Facebook.这样可以正常工作,但如果您在上传过程中通过单击"主页"按钮来设置应用程序,则会暂停上载.如果您预览应用程序,则会继续上传.
我希望会发生的是上传将在后台完成.
有什么希望让它工作?我是否在整个beginBackgroundTask中做错了什么?以这种方式工作似乎太简单了,但这就是文档似乎所说的.
任何帮助,非常感谢.
- 约翰
我的应用需要将图像保存到磁盘.我在一个单独的线程中执行此操作,因此UI仍然响应,但是,我不希望用户添加新图像,直到第一个保存(大约1秒).
目前,我正在禁用"拍摄另一张照片"按钮并将其灰显,但我想知道是否有一种方法可以禁用整个视图,使按钮变灰并使背景变暗,就像发生的情况一样提出了一份UIActionSheet.
我查看了UIView文档并且没有看到这样的内容,但它看起来像苹果经常使用的这种有用的模式,我想我会问,以防万一有这样的事情.
显然我可以手动完成,但如果它已经是API的一部分,为什么要重新发明轮子.
TIA:约翰
我已经建立了一个很好的网站系统,以满足小型利基市场的需求.去年我通过使用Capistrano将软件副本部署到我的网络服务器来销售这些网站.
在我看来,这些网站的唯一区别是数据库,CSS文件以及用于单个客户端图形设计的一小组图像.
其他一切都完全一样,或者应该是......现在我已经部署了大约20个这样的站点,用相同的代码保持它们全部更新变得很麻烦.这个问题只会变得更糟.
我想我应该重构这个系统,这样我就可以使用一组部署的ruby代码,通过传入请求的URL动态选择正确的数据库等.
似乎有两种处理数据库的方法:
多数据库方法对我来说是最简单的,因为我不必重构应用程序中的每个模型来将client_id字段添加到所有CRUD操作中.
但是,每次我想要迁移数据库时,必须为数十个或数百个不同的数据库运行"rake db:migrate"是一件麻烦事.显然这可以通过脚本完成,但它闻起来不太好.
另一方面,每个客户在'items'表中将有20K-50K项目.当items表中有五十万或几百万个项目时,我担心全文搜索的速度.即使在client_id字段上有索引,我怀疑如果将项目分成不同的客户端数据库,搜索会更快.
如果有人对解决这个问题的最佳方法有了明智的意见,我非常希望听到它.非常感谢...
- 约翰
在我的iOS应用中,我需要将图像保存为短视频片段.我有这个工作使用AVAssetWriter和AVAssetWriterPixelBufferAdaptor,感谢这个网站上的一些很棒的帖子,但我不得不捏造开始和结束会话时间,以及演示时间,因为我真的不了解它们.
以下片段创建了一个2秒的视频,但我通过反复试验设置了不同的时间.老实说,我不确定为什么它不能制作3秒的视频.
// start session
videoWriter.movieFragmentInterval = CMTimeMake(1,600);
[videoWriter startWriting];
CMTime startTime = CMTimeMake(0, 600);
[videoWriter startSessionAtSourceTime:startTime];
while (1) {
if (![writerInput isReadyForMoreMediaData]) {
NSLog(@"Not ready for data");
} else {
[avAdaptor appendPixelBuffer:pixelBuffer
withPresentationTime:CMTimeMake(1200,600)];
break;
}
}
//Finish the session:
[writerInput markAsFinished];
CMTime endTime = CMTimeMake(1800, 600);
[videoWriter endSessionAtSourceTime:endTime];
[videoWriter finishWriting];
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个片段中的各种时间设置,或者指向一个有用的文档吗?我读过苹果文档,直到我睁大眼睛,但我猜它们比我现在拥有更多的知识.
TIA:约翰
我正在努力遵守Apple关于在我的应用中响应低内存警告的指导原则.指南说:"收到(低内存警告)后,您的应用程序必须释放尽可能多的内存,方法是释放不需要的对象,或者清除以后可以重新创建的内存缓存."
问题是,如何使用ARC"释放"内存?
例如,假设我在视图的视图层次结构中有一个不在屏幕上的图像.在didReceiveMemoryWarning中,我目前通过调用removeFromSuperview将其从视图中删除,但我仍然有一个指向UIImage本身的指针.我还应该尝试释放这段记忆吗?怎么样?通过为指针指定nil?
TIA:约翰
在我的iOS应用程序(SDK 5.6)中,我从短视频创建AVURLAsset,如下所示:
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.如果我在gdb中检查资产,它看起来像这样:
(gdb) po asset
<AVURLAsset: 0x1a1c40, URL = file://localhost/var/mobile/Applications/A2142D8E-BC19-4E0B-A4C8-ABED4F7D4970/Documents/sample_iTunes.mov>
Run Code Online (Sandbox Code Playgroud)
我使用Apple网站上的示例.mov文件,该文件存储在应用程序的Documents目录中.
我想知道这段视频的持续时间,以便进一步处理,但是当我检查持续时间属性时,我得到了这个:
(gdb) po asset.duration
There is no member named duration.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?有没有其他方法来确定AVAsset或AVAssetTrack的持续时间?
TIA:约翰
我显然错过了一些东西......
在我的iOS应用程序中,我将UIViewController推送到导航控制器:
MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController"];
[self.navigationController mvc animated:YES];
Run Code Online (Sandbox Code Playgroud)
MyViewController显示正常,我可以看到并使用navigationBar,但当我尝试从视图控制器中获取指针返回导航控制器时,我得到一个零结果.
UINavigationController *nav = [self navigationController];
if (!nav) {
NSLog(@"no nav");
}
Run Code Online (Sandbox Code Playgroud)
我整天都在反对这一点,但却看不出我做错了什么.我在Xcode中没有任何警告或错误.我完全错过了什么吗?
TIA:约翰
我想这是一个非常基本的问题,但我似乎无法在我的任何一本书中找到答案.
假设我有一个日期,创建如下:
NSDate *today = [NSDate date];
Run Code Online (Sandbox Code Playgroud)
但是我想把'今天'的时间部分改为'00:00:00'.我怎样才能做到这一点?
- - 添加 - -
我试过这个:
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:11];
[components setMonth:5];
[components setYear:2013];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate = [calendar dateFromComponents:components];
NSLog(@"Current date: %@", startDate);
Run Code Online (Sandbox Code Playgroud)
但NSLog打印出来:
Current date: 2013-05-11 04:00:00 +0000
Run Code Online (Sandbox Code Playgroud)
我猜这与我的纽约时区有关?
- 答案 -
以下是寻找它的人的答案.消除04:00:00时间的技巧是将时区设置为GMT:
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
Run Code Online (Sandbox Code Playgroud)
- 修订答案 -
但实际上您可能想要本地时间 - 例如,如果您需要按日期在核心数据中查找记录,并且存储的日期是当地时间 - 那么您可能不希望将时区设置为GMT,毕竟.
ios ×8
avfoundation ×2
objective-c ×2
activerecord ×1
c ×1
cocoa-touch ×1
database ×1
ruby ×1
structure ×1
uiview ×1