Будет проще использовать атрибут data
для мужских и женских входов, как это ..
<input type="radio" name="optradio" id="female" data-check-id="mtn1">
$(document).ready(function() {
$('[name="optradio"]').change(function() {
$('#lhr1 , #mtn1').prop('checked' , false);
$('#'+$(this).attr('data-check-id')).prop('checked' , true);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<h2 align="center"><b><i>Form Validation Assignment</i></b></h2>
<form id="vald" class="form-horizontal" action="">
</div>
<div class="form-check form-check-inline" id="radio1">
<label class="control-label col-sm-2" for="name">Gender</label>
<div class="container">
<label class="radio-inline">
<input type="radio" name="optradio" id="male" data-check-id="lhr1">Male
</label>
<label class="radio-inline">
<input type="radio" name="optradio" id="female" data-check-id="mtn1">Female
</label>
</div>
</div>
<input type="checkbox" name="lhr" value="lhr" id="lhr1"> You can go Lahore<br>
<input type="checkbox" name="mtn" value="mtn" id="mtn1">You can go Multan<br>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default" id="add">Submit</button>
</div>
</div>
</form>
</div>
Вы делаете это так же, как и в Mac OS X: ваши POCO должны соответствовать протоколу NSCoding
. См. здесь для концептуальной справки и здесь для справки по NSCoding.
Если данные не так уж обширны и у вас нет смехотворно сложных отношений между вашими объектами возможно, лучший вариант - записать все в виде списка; его очень быстро выполнить и просто реализовать в коде. Как вы сказали, CoreData, вероятно, потребует много дополнительной работы для адаптации вашего кода, а sqlite действительно хорош только для хранения данных, которые идеально подходят для хранения в реляционной базе данных. Имейте в виду, что sqlite также работает медленнее и использует больше ресурсов, чем работа с двоичными списками.
Для сериализации пользовательского объекта вам просто необходимо соответствовать протоколу NSCoding
. Если ваш объект расширяет NSObject, все, что вам нужно сделать (я считаю), это реализовать их (пример для объекта person):
// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@“Name”];
[coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
name = [[coder decodeObjectForKey:@“Name”] retain];
age = [coder decodeIntegerForKey:@“Age”];
}
NSArray
и NSDictionary
уже реализуют методы для сериализации. Они будут сериализовать все объекты, которые они содержат (если объекты реализуют интерфейс NSCoder - они делают, если они расширяют NSObject). encodeWithCoder
и initWithCoder
NSObject ничего не делают по умолчанию, поэтому, если вы не реализуете свой собственный код в своих классах, ничего не сериализуется.
Если у вас есть NSArray или NSDictionary объектов, вы можете синхронизировать их, используя:
// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;
NSCoder
- это стандартная идиома Какао для сериализации.