所以我在App Store中拥有我的Core Data应用程序版本1,现在我开始处理第2版.
我对我的数据库模型进行了一些小的更改,并且我需要在完成从版本1到版本2的升级之后运行一些自定义代码.
我可以使用Core Data的轻量级迁移来处理模型更改,并且我可以在迁移完成后运行自定义代码.
问题是,我不确定将来会发生什么,当我构建版本3,4,5 ...
假设是这种情况:
版本1到版本2 - 使用轻量级迁移
版本2到版本3 - 使用模型映射
版本3到版本4的自定义迁移- 再次使用轻量级迁移
等等.
我不确定如何构建一个处理轻量级和自定义迁移混合的机制.
我在网上或在核心数据文档中找不到任何谈论这个问题的代码,我的意思是这是大多数核心数据应用程序的一个非常常见的问题,是否有针对此问题的最佳实践示例?
在我的应用我有一个类Person
与personId
属性.
现在我需要一些数据结构来保存一堆独特的Person
对象(unique = different personId)
所以我想我应该使用NSMutableSet作为我的数据结构,但是如何personId
在添加一个人时让NSMutableSet比较属性(所以我不会添加同一个人多一些)?
我的目标是始终拥有一组独特的人(即使我添加了两个具有相同ID的人),我希望NSMutableSet能为我做所有艰苦的工作,如果我正在添加一个已经存在的人它不会添加两次.
我想在视频播放时对视频文件应用滤镜(效果).
我目前正在使用@BradLarson的(优秀)GPUImage
框架来解决这个问题,这里的问题是框架在播放视频时不支持音频播放.
所以我有两个选择:
1)深入GPUImage
代码并更改代码,GPUImageMovie
以便处理音频缓冲区.这需要同步音频和视频帧的知识,不幸的是我没有它.我看到一些黑客尝试播放音频,AVAudioPlayer
但有很多同步问题.
2)使用CoreImage
框架代替GPUImage
.
所以我想看一下使用原生iOS CoreImage
并CIFilter
完成工作的第二个选项.
问题是,我无法找到如何使用做任何例子CIFilter
,我如何从一个文件中的视频应用滤镜?
我必须使用a AVAssetReader
来阅读视频并处理每一帧吗?如果是这样,我又回到了第一个同步音频和视频的问题.
或者有没有办法直接在视频或预览图层上应用滤镜链?
感谢任何帮助:)
处理自定义按钮的按钮触摸事件的最佳做法是什么UITableViewCell
?
我的课:
MyViewController
,MyCustomCell
我可以想到三个选择:
第一个选项 -将按钮作为属性MyCustomCell
,然后在MyViewController
.m文件中添加目标MyViewController
作为目标.
MyViewController
.m文件
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"customCell";
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell.theButton addTarget:self
action:@selector(theButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
}
// Configure the cell...
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
- (void)theButtonTapped:(UIButton *)sender
{
MyCustomCell *selectedCell = (MyCustomCell *)sender.superview;
if (selectedCell) {
NSIndexPath *indexPath = [self.tableView …
Run Code Online (Sandbox Code Playgroud) 我需要始终知道用户在推送通知设置中选择了哪些选项.
(选项包括 - 警报,声音和徽章)
所以,当我的应用程序启动时,我打
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
Run Code Online (Sandbox Code Playgroud)
并检测用户选择的内容.
但是,如何在应用程序生命周期内检测用户是否稍后更改设置?
是否有一些委托方法在此设置发生更改时被调用?
iphone objective-c appsettings push-notification apple-push-notifications
我正在寻找一种UIPageViewController
用a 替换原生水平分页的方法UICollectionView
.
到目前为止,我做了以下事情:
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.itemSize = collectionView.frame.size
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 10
collectionView.setCollectionViewLayout(layout, animated: false)
collectionView.isPagingEnabled = true
collectionView.alwaysBounceVertical = false
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到水平分页效果.
现在我想要添加的页面之间的水平空间(像你将做UIPageViewControllerOptionInterPageSpacingKey
的UIPageViewController
)
到目前为止,我无法在不损坏分页效果的情况下添加空格.我正在寻找与以下相同的行为UIPageViewController
:单元格应该填满整个屏幕宽度,并且单元格之间的空间应该只在切换页面时可见.
uikit ios uipageviewcontroller uicollectionview uicollectionviewlayout
我正在使用AVCaptureSession
捕捉和录制视频.
我需要以4:3的比例录制视频,并且分辨率很高.
有没有办法在使用时捕获时指定自定义分辨率AVCaptureSession
?
我试图使用本地预设,但问题是,我需要在4以捕获:3的比例,而且几乎所有的预置为16:9.而4:3的分辨率非常低.
我不能用任何其他方式将预设更改为自定义预设,如果我需要以更好的分辨率捕获4:3视频,该怎么办?有任何想法吗?
我有一个音频文件,我想使用一些效果(如音高效果)处理,然后将最终结果写入文件.
在我处理文件并将其保存到光盘之前,让用户播放音高效果并实时收听变化.
这就是我做实时的事情:
let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryPlayback, error: nil)
audioSession.setActive(true, error: nil)
audioEngine = AVAudioEngine()
audioFile = AVAudioFile(forReading: audioUrl!, error: nil)
audioPlayerNode = AVAudioPlayerNode()
audioEngine.attachNode(audioPlayerNode)
changePitchEffect = AVAudioUnitTimePitch()
changePitchEffect.pitch = 1.0 // default
audioEngine.attachNode(changePitchEffect)
audioEngine.connect(audioPlayerNode, to: changePitchEffect, format: nil)
audioEngine.connect(changePitchEffect, to: audioEngine.outputNode, format: nil)
let frameCapacity = UInt32(audioFile.length)
let buffer = AVAudioPCMBuffer(PCMFormat: audioFile.processingFormat, frameCapacity: frameCapacity)
if audioFile.readIntoBuffer(buffer, error: nil) {
audioEngine.startAndReturnError(nil)
audioPlayerNode.scheduleBuffer(buffer, atTime: nil, options: .Loops, completionHandler: nil)
audioPlayerNode.play() // start playing in a loop
}
Run Code Online (Sandbox Code Playgroud)
然后使用UISlider
我让用户在循环中聆听音频的同时改变音高的值. …
我需要下载一个mp3文件,但我只需要歌曲的前20秒(如果歌曲少于20秒,则需要整首歌曲).
这就是我下载整首歌的方式:
func downloadSong(audioUrl: URL) {
let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let destinationUrl = documentsDirectoryURL.appendingPathComponent(audioUrl.lastPathComponent)
URLSession.shared.downloadTask(with: audioUrl, completionHandler: { (location, response, error) -> Void in
guard let location = location, error == nil else { return }
do {
try FileManager.default.moveItem(at: location, to: destinationUrl)
// song available in destinationUrl
} catch let error as NSError {
}
}).resume()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在20秒后停止下载?我知道我可以下载整首歌然后剪下来,但我想要更高效,特别是如果这首歌很长.
我知道当使用a AVQueuePlayer
来播放AVPlayerItem
对象列表时,播放器会预先加载队列中的下一个项目,以便在用户到达此项目时更快地重新加载.
问题是我需要更多地控制哪些项目预加载,例如我希望预先加载3首下一首歌曲和2首前一首歌曲并准备快速加载.
所以我想自己管理这些AVPlayerItem
对象,我只是不确定如何预加载AVPlayerItem
?
例如,我如何预加载前30秒?
ios ×8
objective-c ×6
avfoundation ×3
iphone ×2
appsettings ×1
avplayer ×1
core-data ×1
core-image ×1
download ×1
gpuimage ×1
mp3 ×1
nsmutableset ×1
nsset ×1
nsurlsession ×1
swift ×1
uibutton ×1
uikit ×1
uitableview ×1