Astuce iphone : nombre de chiffres significatifs avec NSLog()

Si vous voulez spécifier le nombre de chiffres après la virgule lors de la création d’un NSString, la syntaxe est :

%.nf ou n représente le nombre de chiffres après la virgule.

Cela marche aussi avec le C pur et la comande printf.

Publicités

23 septembre 2009 at 9 h 17 min Laisser un commentaire

Mieux que le « spotlight » : les outils de bases d’ UNIX

Pour ceux qui l’ignorent encore, Snow Leopard et plus généralement la famille MacOS x, est basé sur le systeme d’exploitation BSD.

SI vous êtes un jour confrontés à la problématique de retrouver le nom d’un fichier contenant une certaine chaîne de caractère (dont vous avez oublié le nom), utilisez la puissance des outils de bases d’unix pour effectuer cette tâche et jouissez de la commande grep et du -exec de find! 🙂

Une petite piqure de rappel au cas ou vous n’êtes pas familiers de la ligne de commande linux :

find / -exec grep -l expression_a_rechercher {} \;

19 septembre 2009 at 14 h 10 min Laisser un commentaire

Astuce iPhone : afficher la taille d’un CGRect avec NSLog

Si vous souhaitez afficher une structure C (CGPoint ou CGRect par exemple), vous avez du vous rendre compte que le format %@ n »était pas efficace…

Plutot que de passer par une macro, il est possible d’utiliser une des fonctions en C fournies par le SDK de l’iPhone:
Par exemple :

– NSStringFromCGRect(self.view.frame)
– NSStringFromCGPoint(self.view.frame.origin)

10 août 2009 at 12 h 55 min Laisser un commentaire

Place dans un classement et rang parmi des enregistrements MySQL

Si vous voulez réaliser un Top 1000 pour votre jeu en ligne ou plus généralement connaitre quelle est la place d’un de vos tuple dans un ensemble trié d’enregistrements, voici une petite astuce qui vous permettra d’obtenir le résultat avec un moyen 100 % SQL ( pas besoin de variable compteur coté serveur).

Imaginez une table players contenant les colonnes « pseudo, score et time_played ». Notre objectif est de connaitre la position d’un joueur dans le classement total connaissant le champ « pseudo ». L’obtention de son rang va se faire en 3 temps :

1. On va commencer par initialiser une variable MySQL avec la commande SET:
SET @counter = 0;

2. L’étape suivante consiste à effectuer une première requête qui va compter et créer une colonne indiquant le rang de chacun des enregistrements au sein de la table.
SELECT pseudo,score,time_played,@counter:=@counter+1 AS rang FROM players ORDER BY score ASC;

3. Enfin, nous allons isoler l’enregistrement qui nous intéresse, à savoir, celui dont la valeur pseudo est celle que nous cherchons.

Il s’agit d’une simple requête du type

SELECT place,pseudo FROM (*****) AS subrequest WHERE pseudo = ‘John Doe’;

Si vous avez suivi, vous aurez d’ores et déja compris qu’il va falloir remplacer les ***** par notre requête construite à l’étape 2 (il s’agit de ce qu’on appelle une sous- requete). Le résultat obtenu devrait être une table contenant le rang et le pseudonyme de notre joueur ‘John Doe’.

N’hésitez pas à envoyer un commentaire si vous avez besoin d’aide !

Références :
Documentation MySQL

4 juin 2009 at 17 h 06 min 1 commentaire

Iphone simulator’s mess : get your AVFoundation audio and video working !

I got yesterday an error when playing a wav or mp sound within the Iphone simulator. My code and everything was right, but the console displayed an error about a quicktime library.

Error loading /Library/QuickTime/DivX Decoder.component/Contents/MacOS/DivX Decoder: dlopen(/Library/QuickTime/DivX Decoder.component/Contents/MacOS/DivX Decoder, 262): Symbol not found: _SCDynamicStoreCopyConsoleUser
Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration

My configuration is Macbook under Mac OS 10.5 + iphone SDK 2.2.1.

How to solve this issue ?

If you have the same kind of message, it means (as far as i understand) your iphone simulator is looking for a codec on your shared library, and found one suiting for the playing of your file, but which is not linked to your simulator.

The best way i found was to uninsall with the « DivX uninstaller » program.

If you don’t have any « DivX uninstaller », you can either:

1. Reinstall divx codecs from quicktime thirdparty code download center, and then uninstall the library using this program

or

2. Become root and type some rm -rf on the directory of the evil codec (something like /Library/QuickTime/DivX)

I’m now able to play wav files without any problem.Mp3 and m4v should be OK too.

7 avril 2009 at 20 h 36 min Laisser un commentaire

Animated transition between tabbar’s view on Iphone

Since last week, I’ve been attending a fantastic training course for Iphone developpement delivered by Geppy Parziale from Invasive Code.
I meet great people there, but training is now finished, and I’m on my own to develop some fresh apps!

I’ve been playing around with the Iphone SDK for the last few days. If you like « transitions » perhaps you tried to add an animation to the tab bar view. Nice transitions provide the tabbar’s item a fluent navigation. WARNING : Although i found nothing explicitely dismissing tabbar animation, it seems Apple discouraged programmers to animate tabbars view switching. Please leave a comment if you found information from Apple on this subject!

Anyway, it’s a good exercise to implement view transition to a TabBar controller. This article requires you to know how to implement the ViewController paradigm. I will not cover basic subjects like creating project, interface building, or any other ViewController related questions. If you don’t know about this, I would suggest you to attend to training courses or read some Cocoa Touch tutorials, books, and materials to be familiar with project designing.

I. Prepare your view and controller

If you are familiar with Iphone and Cocoa developpement, you probably noticed how Apple is using the delegation pattern. The project we are going to build here will follow this delegation chain:

Main application –> TabBarAppDelegate –> ViewSwitcher TabbarDelegate

To implement that, the TabBarDelegate is using the UIApplicationDelegate. The ViewSwitcherTabbarDelegate use the UITabBarController Delegate.

Create 2 or 3 viewController class, design their interface, and link them to the UITabbar’s items. Declare your UITabBarController and name it tabBarController in your application delegate .h file. When ready, just open the implementation of your TabBarAppDelegate and modify the applicationDidFinishLaunching: method as this:

-(void)applicationDidFinishLaunching:(UIApplication *)app {

tabBarController.delegate = [[ViewSwitcherTabbarDelegate alloc]init];

[window addSubview:[tabBarController view]]:

[window makeKeyAndVisible]:

}

Don’t forget to release the ViewSwitcherTabbarDelegate and the tabBarController in your dealloc method of the application Delegate.
Let’s talk about what we have done:
The first line of code declares we are using another class to enhance our tabBarController behaviour.
The second line is defining the first view which is appearing when bringing our tabBarController to the screen.
The third line make our window active on the screen.

II. create your animation

Jump to the ViewSwitcherTabbarDelegate implementation file. You need to implements 2 methods to get your delegate working:

These function are
– tabBarController:didEndCustomizingViewControllers:changed:
– tabBarController:didSelectViewController:

The method we are looking for is tabBarController:didSelectViewController:, because this method will be fired when the tabBarController is switching between his views.

Here is an example of the implementation of this method to animate the transition :

-(void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController)viewController{
// prepare your transition
CATransition *transition;
transition = [CATransition animation];
transition.type = yourtypeoftransition
transition.duration = yourduration

// prepare your view switching
[[[ViewController view]layer]addAnimation:transition forKey:nil];
}

When building and runnig, you should now see the transition between the view, using your animation parameters. Enjoy !

6 avril 2009 at 12 h 38 min 7 commentaires

Validation xhtml strict : textes rayés et _target…

Strike !

J’avais l’habitude d’utiliser les balises <strike> et </strike> pour rayer une ligne de texte en HTML, . Seulement ces balises sont dépréciées et feront sauter votre validation xhtml strict!

La solution que je préconise pour barrer du texte en HTML est d’utiliser l’équivalent CSS.

Il suffit par exemple de créer une classe « strike », et de créer un span portant cet attribut de classe pour rayer un texte.
Exemple :

En CSS :
.strike {
text-decoration: line-through;
}

En xHTML :

<p>Ceci est un mot <span class=’strike’>rayé </span></p>

Target !

Autre écueil du passage au xhtml strict: l’utilisation de l’attribut « target=_blank » pour ouvrir un lien dans un nouvel onglet ou une nouvelle fenetre.

L’attribut n’est plus valide xhtml strict, il faut aors utiliser javascript et remplacer l’attribut par :

onclick=« window.open(this.href); return false; »

24 mars 2009 at 15 h 48 min Laisser un commentaire

Articles précédents Articles Plus Récents


Articles récents