小编bro*_*ney的帖子

自定义UICollectionViewCell中的UILabel始终为null,无法更新文本

我为Apple集合视图示例项目创建了一个非常简单的集合视图.我在storyboard中的视图控制器中有一个集合视图,并在集合视图右上角的集合视图单元格内设置一个标签.我已经把它连接到我的自定义单元格中的IBOutlet.这是相关的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.workoutView registerClass:[Cell class] forCellWithReuseIdentifier:@"Cell"];
    ...
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if (collectionView == self.collView) {
        Cell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];    
        cell.segmentTitle.text = @"some text";
        cell.backgroundColor = [UIColor whiteColor];
        return cell;
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

我在segmentTitle.textpart 之后放了一个断点,segmentTitle总是为null.因此,我在模拟器中看到的是空白框.我错过了什么?

storyboard uilabel ios ios6 uicollectionviewcell

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

在Swift中使用AVAudioEngine轻触麦克风输入

我对新的AVAudioEngine感到非常兴奋.它似乎是音频单元的一个很好的API包装器.不幸的是,文档到目前为止还不存在,而且我在使用简单的图表时遇到了问题.

使用以下简单代码设置音频引擎图,永远不会调用tap块.它模仿了一些漂浮在网络上的示例代码,尽管这些代码也不起作用.

let inputNode = audioEngine.inputNode
var error: NSError?
let bus = 0

inputNode.installTapOnBus(bus, bufferSize: 2048, format: inputNode.inputFormatForBus(bus)) { 
    (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
    println("sfdljk")
}

audioEngine.prepare()
if audioEngine.startAndReturnError(&error) {
    println("started audio")
} else {
    if let engineStartError = error {
        println("error starting audio: \(engineStartError.localizedDescription)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是用于分析的原始pcm缓冲液.我不需要任何效果或输出.根据WWDC演讲"502 Audio Engine in Practice",这个设置应该可行.

现在,如果要从输入节点捕获数据,可以安装节点,我们已经讨论过了.

但是这个特殊例子的有趣之处在于,如果我只想使用输入节点,只需从麦克风捕获数据并进行检查,实时分析或者将其写入文件,我可以直接安装点击输入节点.

而tap将完成拉动数据输入节点的工作,将其填充到缓冲区中,然后将其返回给应用程序.

获得该数据后,您可以随心所欲地执行任何操作.

以下是我尝试的一些链接:

  1. http://hondrouthoughts.blogspot.com/2014/09/avfoundation-audio-monitoring.html
  2. http://jamiebullock.com/post/89243252529/live-coding-audio-with-swift-playgrounds(在startAndReturnError的playground中的SIGABRT)

编辑:这是基于Thorsten Karrer建议的实现.遗憾的是,它不起作用.

class AudioProcessor {
    let audioEngine = AVAudioEngine()

    init(){
        let inputNode = audioEngine.inputNode
        let bus = 0 …
Run Code Online (Sandbox Code Playgroud)

core-audio avfoundation ios swift ios8.1

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

清理嘈杂的倒谱结果

我一直在iphone上进行简单的频率检测设置.在存在谐波的情况下,使用FFT结果在频域中进行分析有些不可靠.我希望使用倒谱结果来帮助确定正在播放的基本频率.

我正在使用AudioToolbox框架中的AudioQueues,并使用Accelerate框架进行傅立叶变换.

我的过程正是维基百科的Cepstrum文章中列出的Real Power Cepstrum,具体为:信号→FT→abs()→square→log→FT→abs()→square→power倒谱.

我遇到的问题是倒谱结果非常嘈杂.我必须删除第一个和最后20个值,因为它们与其他值相比是天文数字.即使在"清理"数据之后,仍然存在大量的变化 - 远远超过我对第一张图的预期.有关频域和quefrency域的可视化,请参见下面的图片. FFT FFT 倒谱 倒谱

当我在频域中看到如此明显的赢家时,我希望在quefrency域中看到类似的清晰结果.我玩了A440,并希望bin 82左右的音量最高.图表上的第三个峰值代表bin 79,它足够接近.正如我所说,前20个左右垃圾桶在幅度如此天文数字的是unusuable,我不得不从数据集中删除他们为了看到什么.倒谱数据的另一个奇怪的质量是偶数箱似乎远远高于奇数箱.以下是77-86的频率分档:

77: 151150.0313
78:  22385.92773
79: 298753.1875
80:  56532.72656
81: 114177.4766
82:  31222.88281
83:   4620.785156
84:  13382.5332
85:     83.668259
86: 1205.023193
Run Code Online (Sandbox Code Playgroud)

我的问题是如何清理频域,以便我的Cepstrum域结果不那么疯狂.或者,帮助我更好地理解如何解释这些结果,如果它们正如人们在倒谱分析中所期望的那样.我可以发布我正在使用的代码的示例,但它主要使用vDSP调用,我不知道它会有多大帮助.

iphone signal-processing fft pitch frequency-analysis

8
推荐指数
1
解决办法
1335
查看次数

任何滚动都会调用UICollectionViewLayout prepareLayout

在实现自定义UICollectionViewLayout子类时发现了这种奇怪的行为.我设置了子类方法,除了collectionViewContentSize.所有细胞都出现在我预期的位置,但contentView时间太长了.看起来应该是它的两倍.

我实现了下面的方法来获得正确的contentSize.虽然现在是预期值,但prepareLayout每次视图滚动一个像素时都会调用它.这意味着如果我从0,0刷到0,500,prepareLayout则称为500次!

collectionViewContentSize那可能导致我的原因是什么?

- (CGSize)collectionViewContentSize {
    UICollectionViewLayoutAttributes *leftAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:0]-1 inSection:0]];
    UICollectionViewLayoutAttributes *rightAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:1]-1 inSection:1]];
    float leftHeight = leftAttributes.frame.size.height + leftAttributes.frame.origin.y;
    float rightHeight = rightAttributes.frame.size.height + rightAttributes.frame.origin.y;
    float maxHeight = leftHeight > rightHeight ? leftHeight : rightHeight;
    return CGSizeMake(self.collectionView.bounds.size.width, maxHeight);
}
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewlayout

7
推荐指数
1
解决办法
5594
查看次数

Guard Malloc立即发现EXC_BAD_ACCESS错误.为什么不一直使用?

我几天来一直在调试臭名昭着的EXC_BAD_ACCESS错误.NSZombieEnabled = YES没有提供任何东西.每次收到错误时,调用堆栈都不同,每隔5或6次运行一次.

我在Lou Franco的网站上看到了启用guard malloc(现在是Xcode 4的方案编辑器)的提示:了解EXC_BAD_ACCESS.一旦我这样做,我的程序就停止了导致这个难以捉摸的错误的确切行.

根据其描述,guard malloc为每个malloc创建单独的页面,并在释放内存时删除整个页面,从而在访问释放的内存时使程序崩溃.对于一般的开发,为什么我不能一直保持对malloc的保护?它似乎很容易捕获某些类型的内存错误.如果我没有专门测试内存管理或性能,那么使用它有一些缺点吗?

iphone malloc exc-bad-access guard

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

Android video.duration直到video.play()才加载

我有一个html5视频,我试图在播放期间以特定间隔设置回调.该视频开始使用javascript播放video.play().现在我的代码侦听'loadedmetadata'事件,然后查询持续时间并设置这些回调.适用于移动游猎,但不适用于Android(2.3.4和2.3.7).

在Android上,'loadedmetadata'似乎在持续时间实际可用之前发出.为了测试这一点,我在代码中的加载过程的每一步都记录了持续时间,以查看实际可以读取的位置.video.play()在一个'timeupdate'事件之前和之后,该video.duration属性为6000,无论使用何种视频.我用mp4文件和3gp文件测试了这个.一旦满足这些条件,就可以获得实际持续时间.

我发现这个帖子有类似的问题[1].未被接受的最高投票答案是我最初的设置,它在iOS上运行良好.接受的答案也不起作用,并表明这是一个webkit问题.我记录了该video.readyState属性,看到它是'4'在视频开始播放之前,但是在开始播放和第一个'timeupdate'事件之前,持续时间仍然不可用.

我们当前的解决方法是查询video.duration值,并且仅在何时设置事件回调video.duration !== 6000.这非常难看,我想深究它,以免这个黑客回来咬人.这里的讨论[2]似乎表明该问题可能与编码有关.也就是说,没有正确编码,android在加载文件之前不会正确读取元数据,或者可能根本没有读取元数据,而是以另一种方式计算持续时间.

我能做些什么来使这个更干净,或者我现在仍然坚持使用黑客?

[1] 检索HTML5视频时长的问题

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

javascript video html5 duration

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

在Swift中将String转换为UnsafeMutablePointer <char_t>

我正在使用第三方c API,我试图用一个简单的字符串调用其中一个函数.像这样的东西:

some_c_func("aString");
Run Code Online (Sandbox Code Playgroud)

我收到一个构建错误:

Type 'UnsafeMutablePointer<char_t>' does not conform to protocol 'StringLiteralConvertible'
Run Code Online (Sandbox Code Playgroud)

我已经看到一些建议在字符串或类似的转换上使用utf8,它几乎在那里,但有以下错误:

some_c_func("aString".cStringUsingEncoding(NSUTF8StringEncoding));
'UnsafePointer<Int8>' is not convertible to 'UnsafeMutablePointer<char_t>'
Run Code Online (Sandbox Code Playgroud)

如何创建UnsafeMutablePointer?

cstring swift

5
推荐指数
1
解决办法
2280
查看次数

Rails渲染并返回before_action,DoubleRenderError

在具有before_action的控制器操作中,using render something and return实际上并不会导致控制器停止执行其余操作.在我的测试中,只有在控制器操作中调用时才能and return正常工作.

# DoubleRenderError
class SomeController < ApplicationController
    before_filter :double_render, only: [:index]

    def index
        render file: "public/500.html", status: :internal_server_error
    end

    def double_render
        render file: "public/404.html", status: :not_found and return
    end
end

# Renders 404 only, no error
class SomeController < ApplicationController
    def index
        render file: "public/404.html", status: :not_found and return
        render file: "public/500.html", status: :internal_server_error
    end
end
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?before_actions可以停止控制器执行的其余部分吗?

ruby-on-rails before-filter ruby-on-rails-4

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