iPhone SDK - Observers e NSDictionarys

Posted on sexta-feira, julho 10, 2009 -

Pense numa aplicação que você passa um array de downloads, esse array vc joga em threads pra fazer download mais rapido... quando você estiver em threads, imagine o trabalho que você vai ter pra controlar esses downloads se estao acabando.. quantos já foram feitos... ???

Você pode fazer um controle disso usando observers, que uma vez declarados, podem ver o seu objeto em praticamente qualquer ponto do sistema.

A seguir um exemplo de observer com NSDictionary:

NSMutableDictionary* teste = [[NSMutableDictionary alloc] init];
[teste addObserver:self forKeyPath:@"nome" options:0 context:nil];
[teste setObject:@"Joao" forKey:@"nome"];
[teste setObject:@"Manoel" forKey:@"nome"];
[teste setObject:@"Jairo" forKey:@"nome"];

Declare isso na sua implementacao de classe:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change
context:(void *)context {
NSLog(@"%@ ", [object objectForKey:keyPath]);
}

Boa sorte !

Shake !

Posted on sexta-feira, julho 03, 2009 -

Como detectar um balanço no iPhone ?
Pesquisei um pouco para atender a pedidos de alunos em aula e achei algumas classes que usam C, mexi um pouco e alterei o conceito, e criei uma forma em Cocoa, segue código pros curiosos:

Depois de chamar pelo acelerometro*, no delegate dele use o seguinte:

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

UIAccelerationValue length, x, y, z;

[myAccelerometer insertObject:[[NSNumber alloc] initWithFloat:(acceleration.x * 0.1 + [[myAccelerometer objectAtIndex:0] floatValue] * (1.0 - 0.1))] atIndex:0];
[myAccelerometer insertObject:[[NSNumber alloc] initWithFloat:(acceleration.y * 0.1 + [[myAccelerometer objectAtIndex:0] floatValue] * (1.0 - 0.1))] atIndex:1];
[myAccelerometer insertObject:[[NSNumber alloc] initWithFloat:(acceleration.z * 0.1 + [[myAccelerometer objectAtIndex:0] floatValue] * (1.0 - 0.1))] atIndex:2];

x = acceleration.x - [[myAccelerometer objectAtIndex:0] floatValue];
y = acceleration.y - [[myAccelerometer objectAtIndex:0] floatValue];
z = acceleration.z - [[myAccelerometer objectAtIndex:0] floatValue];

length = sqrt(x * x + y * y + z * z);

if(length >= 2.0) {
NSLog(@"UHHHH Vibrei!!!!");

}

*Para instanciar o acelerometro com o delegate sendo a propria classe:
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 25)];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];

Recent Posts

Followers