Question

Lors de l'ajout de nouvelles propriétés à des classes, je me retrouve à taper les mêmes choses encore et encore dans xcode:

  1. ajoutez TYPE * NAME; (dans l'interface .h)
  2. add @property (nonatomic, keep) TYPE * NAME; (en .h)
  3. add @synthesize NAME; (au format .m)
  4. add [publication du nom]; (au format .m dealloc)

(Je suis dans un environnement non-récupéré.)

Comment puis-je le faire automatiquement?

Était-ce utile?

La solution

Cela semble à peu près correct. Selon le document d'Object-C 2.0, le IIRC, vous pouvez peut-être ignorer l'étape n ° 1, mais sinon, je ne connais aucun raccourci.

Vous pourriez probablement écrire un script utilisateur pour le faire dans Xcode. Voir http://www.mactech.com/articles /mactech/Vol.23/23.01/2301XCode/index.html .

Autres conseils

Selon la documentation destinée aux développeurs à 64 bits les temps d'exécution, vous pouvez omettre l'étape 1.

Vous pouvez consulter le RMModelObject d'Andrew Pang - je n'ai pas utilisé mais il agit comme une classe de base d’objet qui simplifie la création de modèle.

Je ne l'ai pas utilisé, mais voici une partie de ce qui est mis en évidence dans le fichier Lisez-moi:

  
      
  • pas besoin de déclarer des variables d'instance,
  •   
  • pas besoin d'écrire des méthodes d'accès,
  •   
  • support gratuit du protocole NSCopying ( -copyWithZone: ),
  •   
  • support du protocole NSCoding gratuit ( -initWithCoder: , -encodeWithCoder: ),
  •   
  • free -isEqual: et implémentation de -hash`,
  •   
  • inutile d’écrire -dealloc dans la plupart des cas.
  •   

Voici une autre solution que j'ai modifiée depuis cet article (voir également l'article initial )

La version du blog cherchait des variables en dehors du bloc de déclaration de variables et correspondait aux noms de méthodes. J'ai fait un correctif grossier pour ne rechercher que les variables avant le premier '}'. Cela cassera s'il y a plusieurs déclarations d'interface dans le fichier d'en-tête.

Je règle la sortie sur "Remplacer le contenu du document". et saisir comme "Document entier". ....

#!/usr/bin/python

thisfile = '''%%%{PBXFilePath}%%%'''
code = '''%%%{PBXAllText}%%%'''
selmark = '''%%%{PBXSelection}%%%'''

import re

if thisfile.endswith('.h'):
    variableEnd = code.find('\n', code.find('}'))
    properties = []
    memre = re.compile('\s+(?:IBOutlet)?\s+([^\-+@].*? \*?.*?;)')
    for match in memre.finditer(code[:variableEnd]):
        member = match.group(1)
        retain = member.find('*') != -1 and ', retain' or ''
        property = '@property (nonatomic%s) %s' % (retain,member)
        if code.find(property) == -1:
            properties.append(property)
    if properties:
        print '%s\n\n%s%s%s%s' % (code[:variableEnd],selmark,'\n'.join(properties),selmark,code[variableEnd:])
elif thisfile.endswith('.m'):
    headerfile = thisfile.replace('.m','.h')
    properties = []
    retains = []
    propre = re.compile('@property\s\((.*?)\)\s.*?\s\*?(.*?);')
    header = open(headerfile).read()
    for match in propre.finditer(header):
        if match.group(1).find('retain') != -1:
            retains.append(match.group(2))
        property = '@synthesize %s;' % match.group(2)
        if code.find(property) == -1:
            properties.append(property)
    pindex = code.find('\n', code.find('@implementation'))
    if properties and pindex != -1:
        output = '%s\n\n%s%s%s' % (code[:pindex],selmark,'\n'.join(properties),selmark)
        if retains:
            dindex = code.find('\n', code.find('(void)dealloc'))
            output += code[pindex:dindex]
            retainsstr = '\n\t'.join(['[%s release];' % retain for retain in retains])
            output += '\n\t%s' % retainsstr
            pindex = dindex
        output += code[pindex:]
        print output

Il existe Accessorizer de Kevin Callahan. Depuis la page Web:

  

Accessorizer sélectionne le fichier approprié   spécificateurs de propriété basés sur le type ivar   - et peut aussi générer des accesseurs explicites (1.0) automatiquement mais ...   Accessorizer fait beaucoup, beaucoup plus ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top