В чем основное отличие между менеджерами геометрии Tkinter grid
и pack
?
Что вы используете для ваших проектов?
Если сетка
лучше выровнять объект, Информация извлекается через XML из трех различных источников и сопоставляется вместе в моем ...
Я пишу приложение для iPad (os 3.2), которое использует MKMapKit для отображения движущихся аннотаций на карте. Информация извлекается через XML из трех разных источников и сопоставляется в моем классе аннотаций, а затем отображается на карте. Эта информация поступает каждые 5 секунд. Я работал нормально несколько месяцев, и мои аннотации двигались по мере необходимости.
Весь следующий код является близким приближением к коду (не могу опубликовать точный код моей компании), и он был введен построчно, поэтому он не компилируется.
Мой код аннотации выглядел примерно так :
@interface MyFunkyAnnotation : NSObject <MKAnnotation>
{
CLLocationCoordinated2D coordinate;
NSString *identifier;
// Lots of other fields that can be displayed.
}
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString *identifier;
// Lots of other properties as above.
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
@end
Затем в моей реализации было что-то вроде:
@implementation MyFunkyAnnotation
@synthesize coordinate;
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky
{
[self setCoordinate:[newFunky coordinate]];
[self setIdentifier:[newFunky identifier]];
// Lots more updating of various properties.
}
@end
Это отлично сработало, поэтому я, конечно, решил переделать все это и инкапсулировать большую часть информации в другие классы.
Итак, теперь мой код выглядит следующим образом:
@interface MyFunkyAnnotation: NSObject <MKAnnotation>
{
SourceInfo_1 *source1; // Contains its own coordinate property;
SourceInfo_2 *source2; // Contains its own coordinate property;
SourceInfo_3 *source3; // Contains its own coordinate property;
}
@property (nonatomic, retain) SourceInfo_1 *source1;
@property (nonatomic, retain) SourceInfo_2 *source2;
@property (nonatomic, retain) SourceInfo_3 *source3;
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
-(CLLocationCoordinate2D)coordinate;
@end
Новая реализация:
@implementation MyFunkyAnnotation
@synthesize source1, source2, source3;
-(CLLocationCoordinate2D)coordinate
{
if ([source1 dataReliable] == YES)
{
return [source1 coordinate];
}
else if ([source2 dataReliable] == YES)
{
return [source2 coordinate];
}
else
{
return [source3 coordinate];
}
}
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
{
if ([newFunky source1] != nil)
{
[self setSource1:[newFunky source1];
}
if ([newFunky source2] != nil)
{
[self setSource2:[newFunky source2];
}
if ([newFunky source3] != nil)
{
[self setSource3:[newFunky source3];
}
}
@end;
Запуск этого нового кода привел к тому, что аннотации были добавлены в исходное место, но никогда не перемещались. Я обновляю координаты в источниках source1, source2, source3, когда получаю XML-каналы.
Итак, после целого дня отладки и пробования различных вещей, я заставил его работать. Затем я начал удалять все, что я добавил в течение дня, чтобы получить следующие минимальные изменения, чтобы заставить его работать, и результаты были довольно странными:
Интерфейс не изменен.
@implementation MyFunkyAnnotation
@synthesize source1, source2, source3;
-(CLLocationCoordinate2D)coordinate
{
if ([source1 dataReliable] == YES)
{
return [source1 coordinate];
}
else if ([source2 dataReliable] == YES)
{
return [source2 coordinate];
}
else
{
return [source3 coordinate];
}
}
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
{
if ([newFunky source1] != nil)
{
[self setSource1:[newFunky source1];
}
if ([newFunky source2] != nil)
{
[self setSource2:[newFunky source2];
}
if ([newFunky source3] != nil)
{
[self setSource3:[newFunky source3];
}
}
@end;
Запуск этого нового кода привел к тому, что аннотации были добавлены в исходное место, но никогда не перемещались. Я обновляю координаты в источниках source1, source2, source3, когда получаю XML-каналы.
Итак, после целого дня отладки и пробования различных вещей, я заставил его работать. Затем я начал удалять все, что я добавил в течение дня, чтобы получить следующие минимальные изменения, чтобы заставить его работать, и результаты были довольно странными:
Интерфейс не изменен.
@implementation MyFunkyAnnotation
@synthesize source1, source2, source3;
-(CLLocationCoordinate2D)coordinate
{
if ([source1 dataReliable] == YES)
{
return [source1 coordinate];
}
else if ([source2 dataReliable] == YES)
{
return [source2 coordinate];
}
else
{
return [source3 coordinate];
}
}
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
{
if ([newFunky source1] != nil)
{
[self setSource1:[newFunky source1];
}
if ([newFunky source2] != nil)
{
[self setSource2:[newFunky source2];
}
if ([newFunky source3] != nil)
{
[self setSource3:[newFunky source3];
}
}
@end;
Запуск этого нового кода привел к тому, что аннотации были добавлены в исходное место, но никогда не перемещались. Я обновляю координаты в источниках source1, source2, source3, когда получаю XML-каналы.
Итак, после целого дня отладки и пробования различных вещей, я заставил его работать. Затем я начал удалять все, что я добавил в течение дня, чтобы получить следующие минимальные изменения, чтобы заставить его работать, и результаты были довольно странными:
Интерфейс не изменен. В реализации я добавил один метод и добавил три другие строки:
@implementation MyFunkyAnnotation
@synthesize source1, source2, source3;
-(void)setCoordinate:(CLLocationCoordinate2D)coordinate // <-- New method
{
nil;
}
-(CLLocationCoordinate2D)coordinate
{
if ([source1 dataReliable] == YES)
{
return [source1 coordinate];
}
else if ([source2 dataReliable] == YES)
{
return [source2 coordinate];
}
else
{
return [source3 coordinate];
}
}
-(void)updateFunkyAnnotationWithNewAnnotation:(MyFunkyAnnotation*)newFunky;
{
if ([newFunky source1] != nil)
{
[self setSource1:[newFunky source1];
[self setCoordinate:[[newFunky source1] coordinate]]; // <--- New Line
}
if ([newFunky source2] != nil)
{
[self setSource2:[newFunky source2];
[self setCoordinate:[[newFunky source2] coordinate]]; // <--- New Line
}
if ([newFunky source3] != nil)
{
[self setSource3:[newFunky source3];
[self setCoordinate:[[newFunky source3] coordinate]]; // <--- New Line
}
}
@end;
Кто-нибудь может объяснить, почему нужно вызывать метод, который на самом деле ничего не делает. «Nil» был заявлением NSLog, поэтому я знаю, что он был вызван. В этом нет абсолютно никакого смысла.
Любое понимание будет очень благодарно.
Ура,
Бретт