小编Ben*_*ley的帖子

重新连接到断开连接的对等体

我在我的应用程序中使用iOS 7 Multipeer框架,但我遇到设备断开连接的问题.如果我在两个设备中打开应用程序:设备A和设备B,这两个设备会自动相互连接.但是,几秒钟后,设备A断开与设备B的连接.即,首先连接是这样的:

A ---> B
A <--- B
Run Code Online (Sandbox Code Playgroud)

几秒钟后:

A ---> B
A      B
Run Code Online (Sandbox Code Playgroud)

设备A维护它的连接,但设备B得到一个MCSessionStateNotConnected.

这意味着A可以向B发送数据但B无法回复.我试图通过检查设备是否已连接来解决这个问题,如果不是,请使用以下命令重新启动连接:

[browser invitePeer:peerID toSession:_session withContext:Nil timeout:10];
Run Code Online (Sandbox Code Playgroud)

但是,使用MCSessionStateNotConnected调用didChangeState回调.

奇怪的是,如果我将应用程序A发送到后台,然后重新打开它,B重新连接到它并保持连接.

Multipeer API(和文档)看起来有点稀疏,所以我假设它会起作用.在这种情况下,我应该如何重新连接设备?

iphone bluetooth ios multipeer-connectivity

30
推荐指数
3
解决办法
9959
查看次数

将Objective-C对象作为void*指针传递给函数

我有一个功能:

  myFunction (MyProc callback, void * ref)
Run Code Online (Sandbox Code Playgroud)

从Objective-C类中调用此函数.该函数传递一个指向回调(类中的函数)和引用的指针.引用是必要的,因为回调是静态调用的,因此没有上下文.ref可用于为回调提供上下文.

我希望能够传递Objective-C类作为参考.所以问题是:

如何将NSObject转换为void*以及如何将void*转换为NSObject.

提前致谢.

pointers casting objective-c callback

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

使用CoreBluetooth读取长特征值

我有一个包含图像数据的特征值.在外围设备中我设置了如下值:

_photoUUID = [CBUUID UUIDWithString:bPhotoCharacteristicUUID];
_photoCharacteristic = [[CBMutableCharacteristic alloc] initWithType:_photoUUID
                                                          properties:CBCharacteristicPropertyRead
                                                               value:Nil
                                                         permissions:CBAttributePermissionsReadable];
Run Code Online (Sandbox Code Playgroud)

我的理解是,当请求此值时,将调用didRecieveRequest回调:

-(void) peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {

    if ([request.characteristic.UUID isEqual:_photoUUID]) {
        if (request.offset > request.characteristic.value.length) {
            [_peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset];
            return;
        }
        else {
            // Get the photos
            if (request.offset == 0) {
                _photoData = [NSKeyedArchiver archivedDataWithRootObject:_myProfile.photosImmutable];
            }

            request.value = [_photoData subdataWithRange:NSMakeRange(request.offset, request.characteristic.value.length - request.offset)];
            [_peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这几乎来自Apple的文档.在didDiscoverCharacteristic回调的中央一侧,我有以下代码:

if ([characteristic.UUID isEqual:_photoUUID]) {
    _photoCharacteristic = characteristic;
    [peripheral readValueForCharacteristic:characteristic];
}
Run Code Online (Sandbox Code Playgroud)

而这反过来调用didUpdateValueCorCharacteristic回调:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic …
Run Code Online (Sandbox Code Playgroud)

bluetooth objective-c ios core-bluetooth

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

我如何在Batik SVG库中使用自定义字体?

我正在研究一个为衣服创建模板的Java程序.用户输入他们想要在服装项目上看到的单词,系统创建PDF模板.要创建模板,我以编程方式创建SVG文档,然后使用Batik将SVG转码为PDF格式.

我的客户现在希望能够使用自定义字体来创建模板.我想知道是否有可能像使用Batik转码器的TTF一样使用字体?如果是这样,您如何设置SVG?

java svg truetype batik

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

复杂写入的Firebase提交/回滚

我正在使用Firebase编写财务应用程序,并且要提交收据,还需要更新许多其他对象.要使数据有效,需要成功完成所有数据更新.如果其中一个写入出现错误,则必须回滚所有更新.

例如:

如果用户提交收据,则必须更新收货对象以及发票对象以及其他总帐对象.

如果更新已开始但用户在中途丢失了互联网连接,则应回滚所有更改.

在Firebase中实现这一目标的最佳方法是什么?

ios firebase

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

拖动鼠标旋转并在Java中缩放

我正在尝试为java中的几何对象创建一个Illustrator样式选择框.

选择框

选择对象时,将绘制边框,并且可以拖动小矩形以重新调整对象的大小.我也想通过拖动来旋转盒子.

到目前为止,我可以缩放盒子,我可以旋转盒子,但我不能一起做这两个.想象一下盒子的角度是45度.当您拖动角落以在x方向上放大框时,由于角度,这将增加框的宽度和高度.

我可以使用以下方式让它工作:

    dx = dx*cos(theta) - dy*sin(theta);
    dy = dy*cos(theta) + dx*sin(theta);
Run Code Online (Sandbox Code Playgroud)

但这只适用于枢轴点位于左上角的情况.我希望能够移动枢轴,然后缩放和旋转.这个问题以前必须经过多次解决.有没有办法可以使用仿射变换将鼠标绘制转换为旋转对象的坐标空间?我宁愿不用挖掘三角学!提前致谢.

java geometry rotation scale affinetransform

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

CoreAudio Audio Graph中的自定义音频效果 - 渲染回调

我正在使用CoreAudio构建一个MIDI合成器.目前,我有以下音频图:

    Sampler -> Reverb -> IO
Run Code Online (Sandbox Code Playgroud)

我需要为图表和混响添加合唱效果.问题是iPhone上没有合唱效果.为了解决这个问题,我计划实现自己的合唱效果.为此,我需要访问音频流.

问题是:什么是在音频图中间访问音频流的最佳方式.

    Sampler -> Reverb -> [Custom processing] -> IOUnit
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用AudioUnitAddRenderNotify回调之类的东西来改变音频流?或者我必须像这样打破音频图形:

    Sampler -> Reverb -> [AudioUnitAddRenderNotify callback] -> buffer -> [RenderCallback] -> IOUnit
Run Code Online (Sandbox Code Playgroud)

任何意见,将不胜感激.

iphone callback core-audio effect audiounit

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

AUGraph在iOS中的电话中断后停止运行

我正在使用AUGraph和AUSampler将MIDI信号转换为音频。该应用程序可以正常运行,但是如果该应用程序被中断(例如电话或计时器)会出现问题。中断后,AUGraph停止运行,没有任何声音。再次获得声音的唯一方法是重新启动应用程序。我正在使用标准方法来处理中断:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(handleInterruption:)
                                             name: AVAudioSessionInterruptionNotification
                                           object: [AVAudioSession sharedInstance]];
Run Code Online (Sandbox Code Playgroud)

发生中断时,将调用handleInterruption方法:

// If the system interrupts the audio session - kill the volume
-(void) handleInterruption: (NSNotification *) notification {
    NSDictionary *interuptionDict = notification.userInfo;
    NSInteger interuptionType = [[interuptionDict valueForKey:AVAudioSessionInterruptionTypeKey] intValue];

    if (interuptionType == AVAudioSessionInterruptionTypeBegan) {
        [self setAudioSessionActive: NO];
        [self stopAUGraph];
    }
    else if (interuptionType == AVAudioSessionInterruptionTypeEnded) {
        [self setAudioSessionActive: YES];
        [self startAUGraph];
    }
}
Run Code Online (Sandbox Code Playgroud)

这是启动和停止AUGraph的方法

-(void) startAUGraph {
    CheckError(AUGraphStart(_audioGraph), "Failed to start Audio Graph");
}

-(void) stopAUGraph {
    Boolean …
Run Code Online (Sandbox Code Playgroud)

iphone interrupt core-audio ipad ios

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

在 Android Studio 中调试时检查变量

我正在寻找一种在 Android Studio 中调试时检查变量值的方法。在 Xcode 中,您可以在终端窗口中键入命令来执行代码。例如:po user.name会打印用户名。Chrome 调试器中有一个类似的工具。你只需输入user.getFriends(),它就会输出朋友列表。

Android Studio 中是否存在这样的东西?目前,我只能检查Variables窗口中的变量,这会更慢且灵活性更低,因为您无法打印函数的值。

android-studio

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