小编Eya*_*yal的帖子

核心数据 - 混合轻量级和自定义迁移

所以我在App Store中拥有我的Core Data应用程序版本1,现在我开始处理第2版.

我对我的数据库模型进行了一些小的更改,并且我需要在完成从版本1到版本2的升级之后运行一些自定义代码.

我可以使用Core Data的轻量级迁移来处理模型更改,并且我可以在迁移完成后运行自定义代码.

问题是,我不确定将来会发生什么,当我构建版本3,4,5 ...

假设是这种情况:
版本1到版本2 - 使用轻量级迁移
版本2到版本3 - 使用模型映射
版本3到版本4的自定义迁移- 再次使用轻量级迁移
等等.

我不确定如何构建一个处理轻量级和自定义迁移混合的机制.
我在网上或在核心数据文档中找不到任何谈论这个问题的代码,我的意思是这是大多数核心数据应用程序的一个非常常见的问题,是否有针对此问题的最佳实践示例?

core-data objective-c core-data-migration ios

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

Objective c - NSMutableSet唯一对象属性

在我的应用我有一个类PersonpersonId属性.
现在我需要一些数据结构来保存一堆独特的Person对象(unique = different personId)

所以我想我应该使用NSMutableSet作为我的数据结构,但是如何personId在添加一个人时让NSMutableSet比较属性(所以我不会添加同一个人多一些)?

我的目标是始终拥有一组独特的人(即使我添加了两个具有相同ID的人),我希望NSMutableSet能为我做所有艰苦的工作,如果我正在添加一个已经存在的人它不会添加两次.

iphone objective-c nsset nsmutableset

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

在视频文件上应用过滤器

我想在视频播放时对视频文件应用滤镜(效果).

我目前正在使用@BradLarson的(优秀)GPUImage框架来解决这个问题,这里的问题是框架在播放视频时不支持音频播放.

所以我有两个选择:

1)深入GPUImage代码并更改代码,GPUImageMovie以便处理音频缓冲区.这需要同步音频和视频帧的知识,不幸的是我没有它.我看到一些黑客尝试播放音频,AVAudioPlayer但有很多同步问题.

2)使用CoreImage框架代替GPUImage.

所以我想看一下使用原生iOS CoreImageCIFilter完成工作的第二个选项.

问题是,我无法找到如何使用做任何例子CIFilter,我如何从一个文件中的视频应用滤镜

我必须使用a AVAssetReader来阅读视频并处理每一帧吗?如果是这样,我又回到了第一个同步音频和视频的问题.
或者有没有办法直接在视频或预览图层上应用滤镜链?

感谢任何帮助:)

objective-c core-image ios gpuimage

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

目标c - 处理自定义UITableViewCell按钮的按钮触摸事件的最佳实践

处理自定义按钮的按钮触摸事件的最佳做法是什么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)

objective-c uibutton uitableview ios

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

objective c - 当用户更改应用程序的通知设置时检测

我需要始终知道用户在推送通知设置中选择了哪些选项.
(选项包括 - 警报,声音和徽章)

所以,当我的应用程序启动时,我打

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
Run Code Online (Sandbox Code Playgroud)

并检测用户选择的内容.

但是,如何在应用程序生命周期内检测用户是否稍后更改设置?
是否有一些委托方法在此设置发生更改时被调用?

iphone objective-c appsettings push-notification apple-push-notifications

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

UICollectionView水平分页,页面之间有空格

我正在寻找一种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)

这工作正常,我得到水平分页效果.

现在我想要添加的页面之间的水平空间(像你将做UIPageViewControllerOptionInterPageSpacingKeyUIPageViewController)

到目前为止,我无法在不损坏分页效果的情况下添加空格.我正在寻找与以下相同的行为UIPageViewController:单元格应该填满整个屏幕宽度,并且单元格之间的空间应该只在切换页面时可见.

uikit ios uipageviewcontroller uicollectionview uicollectionviewlayout

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

AVCaptureSession可以使用自定义分辨率

我正在使用AVCaptureSession捕捉和录制视频.

我需要以4:3的比例录制视频,并且分辨率很高.

有没有办法在使用时捕获时指定自定义分辨率AVCaptureSession

我试图使用本地预设,但问题是,我需要在4以捕获:3的比例,而且几乎所有的预置为16:9.而4:3的分辨率非常低.

我不能用任何其他方式将预设更改为自定义预设,如果我需要以更好的分辨率捕获4:3视频,该怎么办?有任何想法吗?

avfoundation ios avcapturesession

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

添加效果后导出音频文件

我有一个音频文件,我想使用一些效果(如音高效果)处理,然后将最终结果写入文件.

在我处理文件并将其保存到光盘之前,让用户播放音高效果并实时收听变化.

这就是我做实时的事情:

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我让用户在循环中聆听音频的同时改变音高的值. …

avfoundation ios swift avaudioengine

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

ios - 从mp3文件下载仅几秒钟

我需要下载一个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秒后停止下载?我知道我可以下载整首歌然后剪下来,但我想要更高效,特别是如果这首歌很长.

mp3 download ios nsurlsession

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

如何预加载AVPlayerItem

我知道当使用a AVQueuePlayer来播放AVPlayerItem对象列表时,播放器会预先加载队列中的下一个项目,以便在用户到达此项目时更快地重新加载.

问题是我需要更多地控制哪些项目预加载,例如我希望预先加载3首下一首歌曲和2首前一首歌曲并准备快速加载.

所以我想自己管理这些AVPlayerItem对象,我只是不确定如何预加载AVPlayerItem
例如,我如何预加载前30秒?

objective-c avfoundation ios avplayer

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