Annonce

Vous pouvez parler de jailbreak sur ce forum. En revanche, il est interdit d'évoquer tout système permettant de pirater des applications ! Merci de respecter le travail des développeurs.

#251 30-03-2009 16:59:38

Raoul
Membre

Re : TUTORAT

J'ai bien ajouté la ligne dans le makefile, mais il faut autre chose ? (ça a pas l'air de fonctionner)

Sinon tu sais comment faire une appli qui reste toujours en mémoire ?


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#252 31-03-2009 08:36:54

ecirb67
Membre

Re : TUTORAT

Voila, je suis parti du HelloWorld et j'ai un peu regardé toutes les pages de ce topic, et j'ai "essayé" de mettre une image de fond ( qui s'affiche mais en tout petit, pas en fond comme je le veut ) et d'afficher une alert ( qui ne s'affiche pas :s )
J'aimerais savoir ce qui ne va pas.. Percuss ? smile

Mes fichiers :

Brice.h

#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <UIKit/UIWindow.h>
#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#import <UIKit/UITextView.h>
#import <UIKit/UIImage.h>
#import <UIKit/UINavigationBar.h>
#import <UIKit/UIView.h>
#import <UIKit/UIAccelerometer.h>
#import <UIKit/UIAlertView.h>

@interface Brice : UIApplication <UIAccelerometerDelegate> {
    UIView            *mainView;
    UITextView        *textView;
}
@end

Brice.m

#import "Brice.h"

@implementation Brice
- (void) applicationDidFinishLaunching: (id) unused
{
    UIWindow *window;

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

	UIImage *fond = [UIImage imageNamed:@"fond.jpg"];
	
	UIImageView *maVue = [[UIImageView alloc] initWithImage: fond];
	maVue.frame = CGRectMake(0,0,320,480); //Coordonnée et taille
	[window addSubview: maVue]; //Pour afficher tout ça dans la fenetre
	[maVue release]; //On libère la ressource, seulement si on a fini avec et seulement après un alloc

	UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"?"
	message:@"Oups !"
	delegate:self
	cancelButtonTitle:@"-"
	otherButtonTitles:nil];
	[alert show];
	[alert release];

    /* Setup window */
    [window makeKeyAndVisible];
    [window addSubview: mainView];
}
@end

Main.m

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "Brice.h"

int main(int argc, char **argv) {
    int retval;

    NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
    retval = UIApplicationMain(argc, argv, @"Brice", @"Brice");
    [pool release];
    return retval;
}

Hors ligne

#253 31-03-2009 18:07:08

merfolk
Membre

Re : TUTORAT

(je déplace mon msg dans le bon topic wink )

Bonjour,


j'ai un doute sur l'utilisation de ces fonctions :
je fais une fonction qui récupère la première ligne d'un fichier



// _____________________________________________
// parse la couleur
// _____________________________________________
-(NSString*) loadWeb_getCouleur:(NSString*) dataBrut
{
	// couleur = premiere ligne du fichier
	NSArray *words = [dataBrut componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
	NSString *couleur = [[words objectAtIndex:0] retain];
	
	// retour
	return couleur;
}

ça fonctionne très bien, mais je sens bien qu'elle n'est pas écrite comme il faut niveau memoire ? j'ai un NSArray de NSString qui traine...

j'aurai tendance à écrire ça


// _____________________________________________
// parse la couleur
// _____________________________________________
-(NSString*) loadWeb_getCouleur:(NSString*) dataBrut
{
	// couleur = premiere ligne du fichier
	NSArray *words = [dataBrut componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
	NSString *couleur = [[words objectAtIndex:0] retain];
	
       // liberation tableau
       for (int i=0;i<[words count];i++)
	{
		[[words objectAtIndex:i] release];
                // on a fait un retain sur la chaine qu'on veut garder plus haut.
	}	
	words.release;

	// retour
	return couleur;
}

MAIS Ca plante.
Pourquoi ?

De plus dans l"opération
j'ai encore un  NSCharacterSet  qui traine ? Celui là aussi il faut le release?

si on peut me donner le code "correct" pour cette fonction, que je comprenne bien pour  les prochaines wink



merci


ps : ça veut dire que que toutes les fonction qu'on fait doit il doit y avoir 50 release tout au long du code ?

Hors ligne

#254 31-03-2009 20:47:06

Percuss
Modo Robot

Re : TUTORAT

Alors:

Raoul=> Vérifie que tu possède bien le framework MediaPlayer placé dans le même dossier que le framework UIKit. A part ça, je voit pas ce qui t'empeche d'utiliser la vidéo ( si ce n'est le makefile )


ecirb67=> Premièrement cette instruction [window makeKeyAndVisible];
doit se trouver juste après l'allocation de ta fenêtre ( sans ça, pas de fenêtre principale )
Ensuite fait gaffe à l'ordre dans lequel tu ajoute tes vues car elles se superposent. Ton mainView cache donc ton image ( même si dans le cas présent tu a oublié d'initialiser cette vue, et que donc elle n'existe pas ). Pourquoi elle est petite? ba je sais pas. normalement la frame de l'imageVue retaille l'image.

Pour l'alert je pense qu'une foix que l'instruction clef de window sera placée avant, elle apparaitra.


merfolk=> Ton soucis est la

NSString *couleur = [[words objectAtIndex:0] retain];

Pour la suite ça plante parce que premièrement tu ne peut pas faire de release sur un élément de l'objet. Tu peut utiliser des méthodes pour supprimer cet élément mais l'allocation ne le concerne pas. Elle concerne l'objet dans lequel il se situe : words

Cela dit, words n'a jamais été alloué, il n'a donc pas besoin de libérer la mémoire avec un release. Il sera automatiquement détruit à la fin de la boucle.

Et enfin, release ne fait pas partie de words, tu ne peut l'utiliser comme ça => words.release;
Mais comme ça oui => [world release];

Hors ligne

#255 01-04-2009 14:26:59

Raoul
Membre

Re : TUTORAT

Merci perc, a mon avis il me manque le framework (tu sais ou je peux le télécharger ? )

Sinon tu sais comment faire une appli en "arriere plan" qui reste en mémoire lorsque la quitte ?


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#256 01-04-2009 18:19:21

merfolk
Membre

Re : TUTORAT

merci, mais en fait j'avoue je ne comprends pas trop

Toute fonction  (du framework de base) que j'appelle, qui renvoie un objet ou une liste de quelque chose, pareil, jamais de release ?

"le tableau words" a bien été "mem alloué" à un moment par "componentsSeparatedByCharactersInSet", donc à priori il faudrait le détruire, non ? C'est un objet temp, je veux juste un item du tableau. C'est pour ça que je veux faire un retain sur lui, et release sur tous les autres...je vais relire de la doc il y a un truc qui m'échappe sad


@raoul , je crois que ce n'est pas possible ils le disent dans leurs vidéos de présentation. Que justement il faut écrire du code "didFinishedLaunching" pour enregistrer l'état (quand on appuie sur le bouton par exemple, ça quitte)
et quand on relance on recharge les données pour revenir où on était avant... mais bon peut être je m'avance et que c'est possible.

Hors ligne

#257 01-04-2009 18:46:07

Raoul
Membre

Re : TUTORAT

Bah je pense que oui, car des applications comme Veency ou OpenSSH le font bien wink


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#258 01-04-2009 20:01:08

Percuss
Modo Robot

Re : TUTORAT

Raoul pour les App en Background je n'ai jamais testé.


merfolk effectivement toute fonction effectue une allocation théorique. Mais sans alloc ou retain il y a un dealloc automatique.
Suis cette règle simple, pas d'alloc => pas de release

Les objet on un temps de vie limité ( destruction à la prochaine boucle supérieure ). Le release sert à diminuer ce temps vie à la boucle actuel. Ceux qui n'ont pas eu d'alloc sont déjà limité à la boucle actuel, pour ça que ça plante.

Example:

int i = 0;
while (i < 5 ) {
  int j = 0;
  j++;
  i++;
}

NSLog(@"i=%d",i);
NSLog(@"j=%d",j); // Plante car j n'existe plus

Hors ligne

#259 01-04-2009 20:18:41

Raoul
Membre

Re : TUTORAT

Dacc, je vais faire mes propres recherches et je vous tiens au courant wink


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#260 02-04-2009 10:55:04

ecirb67
Membre

Re : TUTORAT

J'ai un peu "simplifié" le code, enlever l'alert et tout ce qui gènait, mais l'app plante :s

Brice.h

#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <UIKit/UIWindow.h>
#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#import <UIKit/UITextView.h>
#import <UIKit/UIImage.h>
#import <UIKit/UINavigationBar.h>
#import <UIKit/UIView.h>
#import <UIKit/UIAccelerometer.h>

@interface Brice : UIApplication <UIAccelerometerDelegate> {
	UIWindow    *window;
	UIImage     *image;
	UIImageView *imgView;
}
@end

Brice.m

#import "Brice.h"

@implementation Brice
- (void) applicationDidFinishLaunching: (id) unused
{
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

	image = [UIImage imageNamed:@"fond.jpg"];
	
	imgView = [[UIImageView alloc] initWithImage: image];
	imgView.frame = CGRectMake(0,0,320,480); //Coordonnée et taille
	[imgView release]; //On libère la ressource, seulement si on a fini avec et seulement après un alloc

	mainView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
    [mainView addSubview:imgView];
	
	[window makeKeyAndVisible];
    [window addSubview: mainView];
}
@end


main.m

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "Brice.h"

int main(int argc, char **argv) {
    int retval;

    NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
    retval = UIApplicationMain(argc, argv, @"Brice", @"Brice");
    [pool release];
    return retval;
}

Dernière modification par ecirb67 (02-04-2009 19:18:47)

Hors ligne

#261 06-04-2009 18:38:53

ecirb67
Membre

Re : TUTORAT

up ?!? :s

Hors ligne

#262 06-04-2009 19:57:00

Raoul
Membre

Re : TUTORAT

essaye
UIImage *image = [UIImage imageNamed:@"fond.jpg"];
a la place de
image = [UIImage imageNamed:@"fond.jpg"];


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#263 06-04-2009 20:15:36

ecirb67
Membre

Re : TUTORAT

je l'ai deja déclaré dans le .h

je sais pas où peut etre le problème, je programme un peu en cours et tout, mais pas en Objective-C ni C ni C++ :s c'est pour ca je galere un peu lol

Dernière modification par ecirb67 (06-04-2009 20:17:39)

Hors ligne

#264 06-04-2009 20:25:58

Raoul
Membre

Re : TUTORAT

je crois que les jpg ne sont pas pris en compte, essaye avec du png wink


iPod touch 2G jailbreak 3.1.2 Redsn0w 0.9

Hors ligne

#265 06-04-2009 21:34:16

Percuss
Modo Robot

Re : TUTORAT

sisi les jpeg sont Ok
Je pense que si ça plante ça vient de la définition de window et mainscreen

Un truc simple pour pister un bug, supprimer ligne par ligne

Dernière modification par Percuss (09-04-2009 21:59:25)

Hors ligne

#266 06-04-2009 22:30:45

ecirb67
Membre

Re : TUTORAT

ok j'vais faire qq tests

Raoul a écrit :

je crois que les jpg ne sont pas pris en compte, essaye avec du png wink

j'avais essayé aussi wink meme avec du Gif, BMP etc ^^

EDIT: Ah ENFIN lol en fait c'était la ligne du release qui bugué, maintenant ca affiche l'image sans probleme merci smile
en attendant de nouvelles interogations, bonne nuit

Dernière modification par ecirb67 (06-04-2009 22:58:12)

Hors ligne

#267 07-04-2009 21:32:51

ecirb67
Membre

Re : TUTORAT

Encore une question, a propos de l'alert que tu avais écrite il y a qq pages :

alert = [[UIAlertView alloc] initWithTitle:@"bRiCe"
    message:@"=)"
    delegate:self
    cancelButtonTitle:@"Quit"
    otherButtonTitles:@"Test",nil];
    [alert show];
    [alert release];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    exit(0);
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    exit(0);
}

Ca marche nickel, ca quitte et tout, mais ca le fait sur les 2 boutons ( Quit et Test )
Donc comment je fais pour assigner au bouton Test un lien vers une page internet par exemble ?

Hors ligne

#268 07-04-2009 22:29:29

Percuss
Modo Robot

Re : TUTORAT

buttonIndex correspond au bouton qui est appuyé.
0,1,2.... du plus haut au plus bas ou de gauche à droite.

A toi te switcher selon le bouton.

Hors ligne

#269 08-04-2009 19:22:07

ecirb67
Membre

Re : TUTORAT

j'comprend pas ou mettre les 0,1,ou 2 ca me fait des erreurs de compil :s

Hors ligne

#270 08-04-2009 19:58:54

Re : TUTORAT

Tu fais une condition :

// Si le bouton gauche est Quit
if (buttonIndex == 0) {
     exit(0);
}
else if (buttonIndex == 1) {
     // bouton test
}


iPod Touch 2G - OS 3.1.1 - 8 GB
Compiler avec son iPhone/iPod

Hors ligne

#271 08-04-2009 20:07:16

ecirb67
Membre

Re : TUTORAT

ok super merci wink

Hors ligne

#272 09-04-2009 13:17:46

Percuss
Modo Robot

Re : TUTORAT

Excuse de pas avoir été beaucoup présent cette semaine mais effectivement tu utilisait ta ressource après l'avoir détruite.

Pour le reste je repasse ce soir.

Hors ligne

#273 09-04-2009 14:10:12

ecirb67
Membre

Re : TUTORAT

Pas de problème wink

Je suis en train de faire un appli, et j'ai besoin de chercher un .JPG a une adresse internet pour l'afficher dans mon appli, et je sais pas comment faire le lien.. ?
De plus, quand j'affiche une image elle est fixe, et j'aimerais bien avoir la possibilité de zoomer dessus, de défiler dessus etc, parce qu'elle est grande et ya du texte dessus qu'on doit pouvoir lire, y'a une option à faire ?

Merci d'avance smile

Dernière modification par ecirb67 (09-04-2009 14:33:20)

Hors ligne

#274 09-04-2009 21:18:03

Percuss
Modo Robot

Re : TUTORAT

Pour faire du zoom il faut utiliser une scrollView ( cf UIScrollView ).
Mais le plus simple pour une image venant d'internet est d'utiliser une webView ( UIWebView ).

Le zoom est alors automatiquement géré, il te suffira juste de mettre l'adresse de l'image.

Hors ligne

#275 09-04-2009 21:37:18

ecirb67
Membre

Re : TUTORAT

UIWebView  *img = [[UIWebView alloc] initWithImage:@"http://..."];

comme ca ?

Hors ligne

Pied de page des forums