小编lev*_*ker的帖子

支持iOS和OSX的Podfile

我正在尝试使用具有iOS和OSX目标的遗留项目来设置CocoaPods.

如果,在我的Podfile的顶部,我指定:

platform :osx, '10.9'
Run Code Online (Sandbox Code Playgroud)

并且,作为示例,指定像CorePlot这样的pod:

pod 'CorePlot'
Run Code Online (Sandbox Code Playgroud)

然后,在a之后pod update,我在Pods目录中看到Mac特定的来源:

Pods/CorePlot/framework/MacOnly
Run Code Online (Sandbox Code Playgroud)

这没关系,除非我要指定:iosplatform那时我看到:

Pods/CorePlot/framework/iPhoneOnly
Run Code Online (Sandbox Code Playgroud)

没有看到MacOnly目录.

CorePlot的podspec根据平台指定这些目录,这就是为什么它们根据我选择的平台以不同方式显示的原因.但是,我希望能够让我的Podfile适用于我的iOS和OSX目标.

我继续想,或许我可以根据项目中的目标指定平台,并省略顶级平台声明:

target "OSX" do
  platform :osx, '10.9'
end

target "iOS" do
  platform :ios, '7.0'
end
Run Code Online (Sandbox Code Playgroud)

但是,一旦我再次执行了一次,我pod update就会遇到版本兼容性错误:

[!]目标平台Pods(OS X)与CorePlot (1.5.1)iOS 3.1.3 - OS X 10.5的最低要求不兼容."

这似乎表明CocoaPods没有识别我的目标块中的版本信息.

而且,如果我将平台添加到顶层,除了目标特定平台之外,我只获得顶级平台所指示的任何平台的代码.

我被迫有两个独立的项目吗?一个用于iOS,一个用于Mac OS X,或者有办法做到这一点?

非常感谢,

列维

   CocoaPods : 0.31.1
        Ruby : ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
    RubyGems : 2.0.3
        Host : Mac …
Run Code Online (Sandbox Code Playgroud)

macos ios cocoapods

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

音频会话"躲避"在iOS 4中被破坏......?

我有一个使用MPAudioPlayerController访问iPod音乐库的应用程序,以及一个AVAudioPlayer,用于在音乐之上叠加音频.我已经使用这个文档作为指导.特别:

最后,您可以增强类别,以便在播放音频时自动降低其他音频的音量.例如,这可以用在锻炼应用中.当您的应用程序想要覆盖语音消息时,假设用户正在练习iPod - 例如,"您已经划了10分钟."为了确保应用程序中的消息可以理解,请将kAudioSessionProperty_OtherMixableAudioShouldDuck属性应用于音频会话.当发生躲避时,设备上的所有其他音频 - 除了电话音频 - 音量降低.

但我没有看到这种行为.实际上,我所看到的(或听到的)是,如果我将kAudioSessionProperty_OtherMixableAudioShouldDuck设置为true来设置AudioSession,则MPAudioPlayerController初始卷会减少,如果我然后在MPAudioPlayerController上调用pause(然后再次播放)音量级别增加到"正常"水平.播放AVAudioPlayer对音频级别没有任何影响......

所以我设置了一个简单的测试用例来重现这个.

在ViewController标头中:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>

@interface MusicPlayerVolumeTestViewController : UIViewController <AVAudioPlayerDelegate>
{
    UIButton *musicButton;
    UIButton *soundButton;
    AVAudioPlayer *audioPlayer;
    MPMusicPlayerController *musicPlayerController;
}
@property (nonatomic, retain) IBOutlet UIButton *musicButton;
@property (nonatomic, retain) IBOutlet UIButton *soundButton;
@property (nonatomic, retain) MPMusicPlayerController *musicPlayerController;

- (IBAction)musicAction;
- (IBAction)soundAction;

@end
Run Code Online (Sandbox Code Playgroud)

并在实施中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Setup our Audio Session
    OSStatus status = AudioSessionInitialize(NULL, NULL, NULL, NULL);    
    //We want our audio to …
Run Code Online (Sandbox Code Playgroud)

core-audio avaudioplayer mpmusicplayercontroller ios4

8
推荐指数
2
解决办法
4414
查看次数

通过objectID获取NSManagedObjects数组返回空数组

我正在尝试使用从单独的上下文收集的对象ID数组来执行提取以从上下文中检索托管对象.但是,fetch返回一个空数组.

从"核心数据编程指南" 链接的"检索特定对象"部分 :

如果您的应用程序使用多个上下文并且您想测试是否已从持久性存储中删除对象,则可以使用self ==%@形式的谓词创建获取请求.作为变量传入的对象可以是托管对象,也可以是托管对象ID ......"

如果需要测试是否存在多个对象,则使用IN运算符比对单个对象执行多次提取更有效,例如:

NSPredicate*predicate = [NSPredicate predicateWithFormat:@"self IN%@",arrayOfManagedObjectIDs];

虽然这是关于测试对象删除,但我假设如果没有删除对象,那么结果数组不为空,并且将包含实际的NSManagedObjects.但是,当我执行此代码时:

- (NSArray *)managedObjectsOfEntityName:(NSString *)entityName fromObjectIDs:(NSArray *)objectIDs managedObjectContext:(NSManagedObjectContext *)managedObjectContext
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
    request.predicate = [NSPredicate predicateWithFormat:@"self IN %@", objectIDs];

    __autoreleasing NSError *error = nil;

    NSManagedObjectID *testID = objectIDs[0];
    NSManagedObject *obj = [managedObjectContext existingObjectWithID:testID error:&error];
    if (!obj)
    {
        NSLog(@"Unable to perform fetch. Error: %@", error);
    }

    error = nil;
    NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
    if (!results)
    {
        NSLog(@"Unable to perform fetch. Error: %@", …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

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

glGenTextures返回现有纹理名称

我在iOS 6.1.4,OpenGL ES 2上,并且遇到了奇怪的行为,glGenTextures返回之前已经返回的纹理"名称" glGenTextures.

具体来说,在初始化时,我遍历我的纹理并让OpenGL知道它们,如下所示:

// Generate the OpenGL texture objects
for (Object3D *object3D in self.objects3D)
{
    [self installIntoOpenGLObject3D:object3D];
}

- (void)installIntoOpenGLObject3D:(Object3D *)object3D
{
    GLuint nID;
    glGenTextures(1, &nID);

    Texture *texture = object3D.texture;
    texture.identifier = nID;
    glBindTexture(GL_TEXTURE_2D, nID);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, [texture width], [texture height], 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)[texture pngData]);
    ARLogInfo(@"Installed texture '%@' with OpenGL identifier %d", texture.name, texture.identifier);
}
Run Code Online (Sandbox Code Playgroud)

这时,我看到纹理名称就像1, 2, 3, ... n预期的那样.

但是,稍后(在异步网络调用返回之后)我创建新纹理并调用installIntoOpenGLObject3D:以安装它们.正是在这个晚些时候,我看到glGenTextures …

textures opengl-es objective-c ios

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

"初始化程序不是编译时常量"错误在.mm中有效吗?

我对自己正在观察的情况感到困惑,并且会喜欢一些见解.首先,我使用Xcode 5,将LLVM 5编译器选项设置为默认值.

我在.m文件中有一行,例如:

static NSArray * const kSchemaVersions = @[@"1"];
Run Code Online (Sandbox Code Playgroud)

并且,正如预期的那样,我看到编译器错误说 Initializer element is not a compile-time constant.

但是,如果我将同一行放在.mm(Objective C++)文件中,编译器不会抱怨.

我完全明白为什么它不起作用,但我很困惑为什么它似乎.

思考?

objective-c objective-c++

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

转换为NSString和从NSString转换后NSDate不等于

我正在尝试存储和检索JSON的日期.从相同的字符串创建的NSDates失败isEqualToDate:.这当然是由于浮点精度问题,但我不知道如何解决它.

给定两个相同的输入字符串dateFromString:,结果NSDate对象应该相等:

NSDate *date1 = [NSDate date];
NSString *string1 = [dateFormatter stringFromDate:date1];
NSDate *dateA = [dateFormatter dateFromString:string1];
NSDate *dateB = [dateFormatter dateFromString:string1];
XCTAssertTrue([dateA isEqualToDate:dateB]);
Run Code Online (Sandbox Code Playgroud)

...但是,实际上生成的日期对象很幸运是相同的(很少是),因为由于浮点精度问题引入了随机残差:

(lldb) p [dateA timeIntervalSinceReferenceDate]
(NSTimeInterval) $4 = 560455653.79073596
(lldb) p [dateB timeIntervalSinceReferenceDate]
(NSTimeInterval) $5 = 560455653.79099989
Run Code Online (Sandbox Code Playgroud)

那么,任何人都会遇到这种情况并解决它吗?我想到的唯一选择就是自己编写,isEquals:但这并不理想.


编辑:

具体来说,我正在寻找的是一种将日期的字符串表示转换回日期对象的方法,对于相同的输入字符串,该日期对象将被视为相等.

NSDate将其内部状态存储在浮点数中的(明显)事实是无关紧要的,因为基金会应该提供一种机制来在给定相同输入时实现输出日期的奇偶校验(即相同的字符串应该产生相等的对象).基金会提供这个并且我错过了它(并且希望SO社区知道关于基金会我不知道的事情),或者基金会是错误的(在这种情况下)并且我正在寻找SO社区的解决方法我没有已经考虑过了.

编辑2:

道歉,我的问题,最初的问题,是无稽之谈.为了简化这篇文章的问题,我引入了两个不可能相等的数字之间的意外比较.

原始废话帖子,为子孙后代:

我正在尝试存储和检索JSON的日期.在NSDate我店为JSON失败isEqualToDate:NSDate我从存储的字符串重新创建对象.这当然是由于浮点精度问题,但我不知道如何解决它.特别:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
dateFormatter.locale = [[NSLocale alloc] …
Run Code Online (Sandbox Code Playgroud)

objective-c ios

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

CouchDB视图返回带有复杂键的空行,用于Date数组比较

我有一个名为"report_data_by_date"的视图,基本上是这样的:

function(doc)
{
  if (doc.report_completed_timestamp)
  {
    emit(doc.report_completed_timestamp, doc);
  }
}
Run Code Online (Sandbox Code Playgroud)

发出类似这样的东西:

{
        "id": "eade1035fb3dc87baba8bdf64b043c2c",
        "key": [
            2011,
            11,
            9,
            14,
            1,
            26,
            305
        ],
        "value": { /*the doc*/}
}
Run Code Online (Sandbox Code Playgroud)

当我查询视图时,像这样:

http://.../_design/ReportMetaData/_view/report_data_by_date
Run Code Online (Sandbox Code Playgroud)

我收回了预期的结果.

但是,当我尝试使用密钥查询(仅匹配某些日期)时,如此(但正确的URL编码):

http://.../_design/ReportMetaData/_view/report_data_by_date?key=[2011,{},{},{},{},{},{}]
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

{"total_rows":16,"offset":16,"rows":[]}
Run Code Online (Sandbox Code Playgroud)

行是空数组.我希望能够收回2011年一年的行数.

我觉得我错过了一些非常微不足道的东西,但尽管我找不到,但我找不到答案.

谢谢你的帮助!

couchdb key

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