我目前正在使用iOS应用程序(用Swift编写),该应用程序应连接两个(以后)的iOS设备,并使用蓝牙在它们之间传输数据。实际使用应该是音乐/音频分发,但是现在我在发送简单文本消息时遇到了很多问题。
我使用Core Bluetooth Framework(低功耗蓝牙4.0)设置外围设备和中央设备的角色,并且(成功建立连接后)我使用此外围设备功能将数据存储在适当的特征中,以供中央设备读取:
public class TextBoxAppender : AppenderSkeleton
{
private RichTextBox _textBox;
public string FormName { get; set; }
public string TextBoxName { get; set; }
public static Control FindContrl(Control root, String searchName)
{
foreach (Control control in root.Controls)
{
if (control.Name.Equals(searchName))
{
return control;
}
if (control.Controls != null)
{
Control c = FindContrl(control, searchName);
if (c != null) return c;
}
}
return null;
}
public delegate void doLog( String value , RichTextBox lger ) ;
public void doLg(String value, RichTextBox lger)
{
lger.AppendText(value);
}
protected override void Append(LoggingEvent loggingEvent)
{
if (_textBox == null)
{
if (String.IsNullOrEmpty(FormName) ||
String.IsNullOrEmpty(TextBoxName))
return;
Form form = Application.OpenForms[FormName];
if (form == null)
return;
Control c = FindContrl(form, "logTextBox");
if (c != null)
{
_textBox = (RichTextBox)c;
}
if (_textBox == null)
return;
form.FormClosing += (s, e) => _textBox = null;
}
doLog a = new doLog(doLg);
if (_textBox.InvokeRequired)
{
_textBox.Invoke(a, new Object[] { loggingEvent.RenderedMessage + Environment.NewLine, _textBox });
}
else
{
_textBox.AppendText(loggingEvent.RenderedMessage + Environment.NewLine);
}
}
}
我想以自定义数据类型“ ChatMessage” 传输数据,该数据类型包含一个用于存储消息文本的String变量和一个用于存储发送设备名称的String。该类是从 NSData 类型派生的,因此我还实现了必需的init / encode / decode函数。
我认为将我的 NSData 类转换为上述功能所需的 Data 类型没有问题。但是在运行时我会收到此错误:
func updateValue(Data, for: CBMutableCharacteristic, onSubscribedCentrals: [CBCentral]?) -> Bool
在自定义类中是否还必须实现一个(getter?-)变量或函数?如果是,那应该是什么样子?我在iOS开发中是一个新手,所以我不知道该类的字节是做什么用的。
谢谢!
我正在使用XCode版本10.0,Swift 4,并用于测试带有iOS 12.0.1的iPhone XS Max和带有iOS 12.0的iPad Air 2。