Так как Apple объявляет, что iOS-приложение должно нормально работать и в ipad. Итак, нам нужно убедиться, что когда мы снимаем фотографию с камеры и выбираем из библиотеки фотографий, нам также необходимо обновить код для iPad относительно UIImagePickerViewController
. Я прилагаю код, который работает как на iPhone, так и на iPad.
let actionSheetController: UIAlertController = UIAlertController(title: "Select Photo", message: "", preferredStyle: .actionSheet)
let cancelActionButton: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in
print("Cancel")
}
actionSheetController.addAction(cancelActionButton)
let saveActionButton: UIAlertAction = UIAlertAction(title: "Photolibrary", style: .default)
{ action -> Void in
self.picker.allowsEditing = true
self.picker.sourceType = .photoLibrary
self.present(self.picker, animated: true, completion: nil)
}
actionSheetController.addAction(saveActionButton)
let deleteActionButton: UIAlertAction = UIAlertAction(title: "Camera", style: .default)
{ action -> Void in
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
{
self.picker.allowsEditing = true
self.picker.sourceType = .camera
self.present(self.picker, animated: true, completion: nil)
}
}
actionSheetController.addAction(deleteActionButton)
if let popoverController = actionSheetController.popoverPresentationController {
popoverController.sourceView = self.view
popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
popoverController.permittedArrowDirections = []
}
self.present(actionSheetController, animated: true, completion: nil)
Как насчет использования "буферов протокола"? Разработанный как эффективный, переносимый, совместимый с версией двоичный формат общего назначения, он предоставляет вам C ++, Java и Python в библиотеке Google , а также C #, Perl, Ruby и другие в общественных портах ?
Обратите внимание, что Guid не имеет определенного типа данных, но вы можете использовать его как сообщение с (по существу) байтом []
.
Обычно для. NET работа, я бы порекомендовал protobuf-net (но, как автор, я несколько предвзят) - однако, если вы собираетесь использовать другие языки позже, вы могли бы сделать лучше (в долгосрочной перспективе), используя Jon's Dotnet-protobufs ; это даст вам знакомый API для разных платформ (где protobuf-net использует идиомы .NET).
Символы ASCII 0 или 1 занимают несколько битов (как и любой другой символ), поэтому, если вы храните его так, ваш «двоичный» файл будет в несколько раз больше, чем должен быть. Текстовый файл с нулями и единицами не является двоичным файлом:)
Вы можете использовать BinaryWriter для записи необработанных данных непосредственно в файловый поток . Единственная часть, которую вам нужно выяснить, - это преобразование вашего формата в памяти (обычно некоторый вид графов объектов) в последовательность байтов, которую может использовать BinaryWriter.
Однако , если ваш основной интерес - это переносимость, я рекомендую против двоичного формата вообще. XML точно разработан для решения проблемы переносимости и совместимости. Это многословный и весомый формат файла, но это Это компромисс, который вы делаете, чтобы решить эти проблемы за вас. Если удобочитаемый формат находится вне таблицы, ответ Марка - это путь. Не нужно изобретать колесо переносимости!
Предположим, ваш формат:
struct Format
{
struct Header // 1
{
byte a;
bool b1, b2, b3, b4, b5, b6, b7, b8;
string name;
}
struct Container // 1...*
{
MyTypeEnum Type;
byte[] data;
}
}
enum MyTypeEnum
{
Sound,
Video,
Image
}
Тогда у меня будет последовательный файл с:
байт // a
байт // b
int // имя размера
char [] // name (размер которого указан выше, помните, что в .NET значение char равно 16 битам)
int // MyTypeEnum type
int // размер данных
byte [] / / data (размер которого указан выше)
Затем вы можете повторять последние три строки столько раз, сколько хотите.
Для чтения вы используете BinaryReader
, который поддерживает чтение байтов, целых чисел. и серия байтов. Существует также BinaryWriter
.
Кроме того, помните, что Microsoft .NET (то есть на компьютере с Windows / Intel) имеет младший порядок. Как и BinaryReader
и BinaryWriter
.
Это зависит от того, какой тип данных вы будете записывать в двоичный файл и какова цель двоичного файла. Это объект класса или просто запись данных? Если это записи данных, я бы порекомендовал поместить их в формате XML. Таким образом, вы можете включить проверку схемы для проверки соответствия файла вашим стандартам. В java и .NET есть инструменты для импорта и экспорта данных из / в формат xml.