小编Cod*_*gle的帖子

使用AVAudioRecorder看似随机文件损坏(有时文件无法播放) - iOS

在我正在开发的应用程序中,我或多或少地碰到了一堵砖墙.在应用程序中,您可以输入一个视图,该视图在标准表视图中列出所有本地保存的音频文件.从这里你可以点击它们来播放它们,或者点击下面的录制按钮进行新的录制,之后会自动保存到应用程序沙箱中.

现在所有这些在大多数情况下实际上都非常好.我可以坐下来录制并播放它们.我可以坐下来测试一下这个45左右,没有任何问题.然后突然在随机的时候我会遇到一个非常奇怪的问题.问题是,无论录制多长时间,录音机都会突然开始保存除了无法播放的损坏文件以及大小正好为4096字节的文件.

我以完全标准的方式使用AVAudioRecorder,设置如下:

// Specific settings for the audio recording
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:AVAudioQualityMin],
    AVEncoderAudioQualityKey,
    [NSNumber numberWithInt:8], 
    AVEncoderBitRateKey,
    [NSNumber numberWithInt: 2], 
    AVNumberOfChannelsKey,
    [NSNumber numberWithFloat:22000.0], 
    AVSampleRateKey,
    nil];

NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc]
    initWithURL:contentURL
    settings:recordSettings
    error:&error];
audioRecorder.delegate = self;
Run Code Online (Sandbox Code Playgroud)

我像这样开始录音:

if (!isRecording) {
    isRecording = YES;
    [audioRecorder record];

    // Start the timer
    recordTiming = [NSDate date];

    timeCheck = [NSTimer
        scheduledTimerWithTimeInterval:1.0f
        target:self
        selector:@selector(timeCheck)
        userInfo:nil
        repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)

然后用这个来阻止它:

if (isRecording) {
    [audioRecorder stop];

    // Stop the timer
    [timeCheck …
Run Code Online (Sandbox Code Playgroud)

audio corrupt audio-recording avaudiorecorder ios

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

Xcode - 替换类文件后链接错误_OBJC_CLASS _ $ _"className"

介绍

在我正在进行的当前项目中,我们正在使用ChartBoost SDK进行popop商业广告.我们一直在使用这个SDK一段时间没有任何问题.它是一个非常简单的库,基本上只有一个名为"ChartBoost.h"的头文件以及一个"libChartBoost.a"文件.

现在我们刚刚用新版本更新了SDK文件.我在这里做的只是通过"Move To Trash"从项目中删除旧的SDK文件.我之后做的只是将新的SDK文件移动到项目中,添加它们的引用.

问题

在完成此操作并编译项目后,我突然遇到2个链接错误.这是它的截图:

截图

我已经尝试了几乎所有我能想到的尝试去除错误.我已经清理了项目和项目文件夹,并且我还试图通过组织者窗口删除项目的派生数据.

我很确定这与链接器试图使用旧文件的引用有关吗?但我不知道如何才能删除那些现在无效的引用.

这里有没有人知道如何解决这个问题?

[编辑]将ChartBoost.a链接到二进制文件

所以我尝试通过"Build Phases"选项卡将ChartBoost.a文件链接到二进制文件.这确实摆脱了两个原始错误,但显示了8个新错误,如下面的屏幕截图所示:

链接错误2

我不太清楚遗憾的是这些链接错误是什么意思:(任何人都有任何想法?

xcode linker objective-c linker-errors ios

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

使用MinGW的GLEW问题:对'_imp__glewExperimental'的未定义引用.

我正在使用GLEW版本1.10.0和MinGW(通过CodeBlocks IDE),在Windows 8上运行.我从GLEW网站下载了Windows二进制文件,并且已经链接到该版本中包含的库.

我有一个链接问题,我似乎无法找到答案.我已经按照GLEW主页上的安装进行了操作.我已经将链接器引用到glew32.lib,以及其他必需的库,例如opengl32和glu32.

不幸的是,编译这段代码(我也使用GLFW进行上下文/窗口管理):

#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

#define TRUE 1
#define FALSE 0

int main()
{
GLFWwindow *window;

if (!glfwInit())
    return -1;

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3.0);
window = glfwCreateWindow(640, 480, "Hello World!", NULL, NULL);

if (!window)
{
     glfwTerminate();
     return -1;
}

glfwMakeContextCurrent(window);

// Initialize GLEW
glewExperimental=TRUE;
GLenum err = glewInit();
if (err!=GLEW_OK)
    fprintf(stderr, "Could not initialize GLEW!");

printf("%s\n", glGetString(GL_VERSION));
while (!glfwWindowShouldClose(window))
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glfwSwapBuffers(window);

    glfwPollEvents();
}

glfwTerminate();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

*对 …

c opengl linker glew glfw

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

从C插件向Unity3D发送字节数据的任何正确方法?

这里只是一个好奇的问题.

当您在iOS平台上为Unity编写插件时,插件具有有限的本机到托管回调功能(从插件再到Unity).基本上这个文档: iOS插件Unity文档

说明你能够回拨的函数签名是这样的:

只能从本机代码调用与以下签名对应的脚本方法:function MethodName(message:string)

C中定义的签名如下所示:

void UnitySendMessage(const char*obj,const char*method,const char*msg);

所以这几乎意味着我只能将字符串发送回Unity.

现在在我的插件中,我使用protobuf-net来序列化对象并将它们发送回Unity以进行反序列化.我已经让这个工作,但通过一个解决方案,我觉得非常丑陋,并不是非常优雅:

Person* person = [[[[[Person builder] setId:123]
                    setName:@"Bob"]
                   setEmail:@"bob@example.com"] build];
NSData* data = [person data];

NSString *rawTest = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

UnitySendMessage("GameObject", "ReceiveProductRequestResponse", [rawTest cStringUsingEncoding:NSUTF8StringEncoding]);
Run Code Online (Sandbox Code Playgroud)

基本上我只是将字节流编码为字符串.在Unity中,我然后获取字符串的字节并从那里反序列化:

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
Byte[] bytes = encoding.GetBytes(message);
Run Code Online (Sandbox Code Playgroud)

这确实有效.但是真的没有办法做到这一点吗?也许有人知道如何以某种替代方式完成它?

c c# objective-c protobuf-net unity-game-engine

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

NSMetaDataQuery从不使用NSMetadataQueryDidFinishGatheringNotification回调

对于我正在编写的iCloud插件,我将iCloud管理器类订阅到这些iCloud NSMetaDataQuery观察器:

// Add a predicate for finding the documents
NSString* filePattern = [NSString stringWithFormat:@"*.%@", @"*"];

self.metadataQuery = [[NSMetadataQuery alloc] init];

// Before starting to query, it is required to set the search scope.
arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

// It is also required to set a search predicate.
[self.metadataQuery setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@", NSMetadataItemFSNameKey, filePattern]];

// Listen for the second phase live-updating
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(queryDidReceiveNotification:) name:NSMetadataQueryDidUpdateNotification object:nil];

// Listen for the first phase gathering
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(queryIsDoneGathering:) name:NSMetadataQueryDidFinishGatheringNotification
                                           object:nil];

[self.metadataQuery startQuery]; …
Run Code Online (Sandbox Code Playgroud)

objective-c nsnotificationcenter ios icloud nsmetadataquery

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

Cocos2D - 粒子跟随发射器而不是停留在它们被释放的位置

在cocos2D中,我目前有一个非常简单的粒子发射器初始化如下:

    turnEmitter = [[CCParticleFlower alloc] init];
    turnEmitter.texture = [[CCTextureCache sharedTextureCache] addImage:@"Pocket.png"];
    [self addChild:turnEmitter z:1];
    turnEmitter.scale = 0.7f;
    turnEmitter.positionType = kCCPositionTypeFree;
Run Code Online (Sandbox Code Playgroud)

它只是直接添加到游戏性层.

这个发射器以这种方式跟随屏幕周围的精灵(在更新方法中发生):

    turnEmitter.position = turnEmblem.position;
Run Code Online (Sandbox Code Playgroud)

现在问题是留在发射器后面的粒子尾部随发射器一起移动,而不是释放的粒子只是停留在它们被释放的位置,这给出了一种非常奇怪和愚蠢的效果.

我想做的是在产生之后颗粒根本不跟随发射器,不幸的是我一直无法找到这样做的方法.

正如你从上面的代码中看到的那样,我已经搜索过了,并且发现人们建议改变发射器的positionType属性,尽管我已经尝试了所有可能性并且它没有解决问题.

有没有人对这可能是什么有任何想法?

particles cocos2d-iphone particle-system ccparticlesystem

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

如何使用libtool在Mac OS上创建.a文件(静态库)?

当谈到使用终端手动构建库时,我很遗憾没有太多的经验,我在这里停留了一下.

我已经下载了一个带有makefile等文件的objective-c库.

我可以看到该文件夹​​还包含一个名为"libtool"的可执行文件,我做了一些搜索,我想这是我必须用来构建必要的.a文件的程序?不幸的是,我真的找不到任何有用的文章似乎有用.

该库的文件夹包含一些.sh文件,.pc文件以及一些.la文件,但我有点不确定我必须使用哪些作为libtool程序的输入来将它们编译成.a文件.

所以我的问题是你有什么文件输入libtool将它们编译成必要的.a文件?你用什么命令来完成这个?

谢谢大家的时间:)

macos compilation objective-c static-libraries libtool

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

iOS - 获得一个奇怪的错误:无法识别的选择器发送到UITableView上的实例

介绍

在我当前的应用程序中,我有一个UITableView,它包含自定义单元格对象.自定义UIViewCellObjects只是标准UITableViewCell类的子类.自定义单元格保存有关运行后台上载的信息,并使用百分比完成等操作更新它们.

自定义单元格对象从后台运行的上载进程中侦听NSNotifications,当它们收到相关通知时,它们只是使用新信息(例如上载百分比)更新自己的视图控件.

现在,当上传过程完成后,我重新排序活动上传对象数组并重新加载tableview,如下所示:

-(void) uploadFinished: (NSNotification*)notification
{
    NSDictionary *userInfo = [notification userInfo];

NSNumber *uploadID = [userInfo valueForKey:@"uploadID"];

if (uploadID.integerValue == uploadActivity.uploadID)
{   
    [[ApplicationActivities getSharedActivities] markUploadAsFinished:uploadActivity];
    [parentTable reloadData];

    [self setUploadComplete];
}
}
Run Code Online (Sandbox Code Playgroud)

现在这个方法发生在tableviewcell对象中,正如你所看到的,他们调用自己的UITableView来在数组排序后立即重新加载数据.该markUploadAsFinished方法简单地重新排序的阵列,因此任何新上传完放在顶部,所以会出现这样的UITableView的.

问题

现在我遇到的问题是,当调用此方法时,我有时会收到以下错误: 'NSInvalidArgumentException',原因:' - [CALayer tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例

我不是总是得到它,有时整个过程运行良好,完成的上传出现在UItableview的开头,而在其他看似随机的时间失败.我真的不知道这里发生了什么.

自定义单元格从.NIB文件加载,如下所示:

    UploadCell *cell = [activeUploadsTable dequeueReusableCellWithIdentifier:@"UploadProgressCell"];

if (cell == nil)
{
    [[NSBundle mainBundle] loadNibNamed:@"UploadCellView" owner:self options:nil];

    cell = customCell;
}
Run Code Online (Sandbox Code Playgroud)

有没有人可能对这里发生的事情有所了解?

编辑

首先,我已经跟踪了这个错误,显示在以下行:reloadData

在自定义单元格对象内部调用.

此外,似乎它发送方法的实例可以改变.我也遇到了这个错误:

'NSInvalidArgumentException', reason: '-[UIScrollViewPanGestureRecognizer tableView:numberOfRowsInSection:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

我真的不知道这里发生了什么.

custom-controls uitableview ios unrecognized-selector

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

AVURLAsset 已正确初始化,但有时其关联的 AVPlayerLayer 仅呈现黑色

我有一个应用程序,用户可以在其中从本地视频文件中进行选择。当这些缩略图之一被推送时,用户会看到一个新视图,其中有一个我制作的用于显示视频的自定义视频播放器。

这可以完美地工作,但只是有时。有趣的是,如果用户选择一个新视频(从而呈现一个新视图,初始化一个新的自定义视频播放器对象)恰好 5 次,则用于呈现播放器视觉效果的底层 AVPlayerLayer 会呈现黑色,即使看起来基础资产仍然正确加载(播放器界面仍然保留正确的视频持续时间等)。

当一个新的自定义媒体播放器对象被初始化时(当加载包含视图的媒体播放器的视图控制器时发生),这是初始化程序方法的一部分,用于设置 AVPlayer 及其关联项:

    // Start to load the specified asset
    mediaAsset = [[AVURLAsset alloc] initWithURL:contentURL options:nil];

    if (mediaAsset == nil)
        NSLog(@"The media asset is zero!!!");

    // Now we need to asynchronously load in the tracks of the specified asset (like audio and video tracks). We load them asynchronously to avoid having the entire app UI freeze while loading occours
    NSString* keyValueToLoad = @"tracks";

    // When loading the tracks asynchronously we also specify …
Run Code Online (Sandbox Code Playgroud)

rendering mediaplayback ipad ios avplayer

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

需要一些关于C头包含的建议

介绍

我是一名经验丰富的程序员,并且在面向对象范例方面拥有多年的经验.最近我决定尝试使用比C#或Java等语言更低级的语言更熟悉和舒适,所以我正在深入研究C,并试图用它创建一些游戏.

一切进展顺利,现在我试图通过将函数定义移动到单独的.c文件中来更好地组织我的代码.由于C中包含的性​​质,这是我开始感到不舒服的地方.我非常熟悉它的工作原理,并且在编译期间也处于预处理阶段.问题是我仍然不确定我是否正确处理了这个问题.

我认为我的问题类似于此处提出的问题.虽然它没有完全满足我需要知道的东西.

问题

基本上,我正在使用两个库创建一个OpenGL项目.一个是glew(对于OpenGL函数加载),另一个是GLFW(用于窗口处理和OpenGL上下文创建).我有两个.c文件,一个名为main.c,另一个名为windowInitialize.c.问题是,main.cwindowInitialize.c都依赖于glew和glfw库.

在我的main.c文件中,我执行以下操作包括:

#include "includes/GLEW/glew.h"
#include "includes/GLFW/glfw3.h"
#include "windowInitialize.h"
Run Code Online (Sandbox Code Playgroud)

此外,main.c执行以下相关函数调用:

if (!initializeGLFW())
 return -1;

GLFWwindow *window = createOpenGLWindow(3, 3, 640, 480, "Hello OpenGL");

/* It is important that we initialize glew AFTER initializing GLFW and setting up
the OpenGL context, as GLEW needs a current context to work */
initializeGLEW();
Run Code Online (Sandbox Code Playgroud)

windowInitialize.c包含函数 …

c linker compilation include c-preprocessor

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

Perlin Noise算法似乎不会产生梯度噪声

我试图用c ++实现Perlin Noise.

首先,问题(我认为)是输出不是我所期望的.目前我只是在greyscaled图像中使用生成的Perlin Noise值,这是我得到的结果: Perlin噪声算法输出

但是,根据我的理解,它应该看起来更像是: 预期的Perlin噪音输出

也就是说,我目前产生的噪音似乎更像是"标准"不规则噪音.

这是我到目前为止实现的Perlin噪声算法:

float perlinNoise2D(float x, float y)
{
    // Find grid cell coordinates
    int x0 = (x > 0.0f ? static_cast<int>(x) : (static_cast<int>(x) - 1));
    int x1 = x0 + 1;
    int y0 = (y > 0.0f ? static_cast<int>(y) : (static_cast<int>(y) - 1));
    int y1 = y0 + 1;

    float s = calculateInfluence(x0, y0, x, y);
    float t = calculateInfluence(x1, y0, x, y);
    float u = calculateInfluence(x0, y1, x, y);
    float v = calculateInfluence(x1, …
Run Code Online (Sandbox Code Playgroud)

c++ random algorithm noise perlin-noise

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