J'utilise xcode 6 fort> et j'ai créé mon application avec un Comme vous pouvez le voir, j'ai quatre utableview code> et a
cellule personnalisée code> dedans.
Ceci est mon
personnalisé cellule code>
iboutets code> à un
suggesteDSeriesView code> qui est une sous-classe de
uiview code>.
Dans le
TableView DataSource Code> Méthodes J'ai créé ces
SuggesececedSeriesView Attribuez-les comme: P>
cellIdentifier = suggestionCell;
SuggestingTableViewCell *suggesting = (SuggestingTableViewCell *)[tableView dequeueReusableCellWithIdentifier:suggestionCell];
Series *ser1 = series[0];
suggesting.seriesOne = [[SuggestedSeriesView alloc] initWithFrame:suggesting.seriesOne.bounds
andSeriesData:@{JV_SERIES_IMAGE_URL : ser1.imageURL,
JV_SERIES_TITLE : ser1.title}];
Series *ser2 = series[1];
suggesting.seriesTwo = [[SuggestedSeriesView alloc] initWithFrame:suggesting.seriesTwo.bounds
andSeriesData:@{JV_SERIES_IMAGE_URL : ser2.imageURL,
JV_SERIES_TITLE : ser2.title}];
Series *ser3 = series[2];
suggesting.seriesThree = [[SuggestedSeriesView alloc] initWithFrame:suggesting.seriesThree.bounds
andSeriesData:@{JV_SERIES_IMAGE_URL : ser3.imageURL,
JV_SERIES_TITLE : ser3.title}];
Series *ser4 = series[3];
suggesting.seriesFour = [[SuggestedSeriesView alloc] initWithFrame:suggesting.seriesFour.bounds
andSeriesData:@{JV_SERIES_IMAGE_URL : ser4.imageURL,
JV_SERIES_TITLE : ser4.title}];
3 Réponses :
Cela se produit parce que vos propriétés sont faibles, cela signifie qu'elles ne conserveront rien, ils ne peuvent que faire référence, ils ne peuvent que faire référence.
iboutlet est égal à vide, il ne s'agit que d'un indice de Xcode pour le dire "Ceci peut être connecté sur Le constructeur d'interface ". P>
La raison pour laquelle les propriétés du constructeur d'interface sont de type faible et Iboutlet est parce que, ils sont retenus par la vue du contrôleur d'affichage du storyboard, donc si vous faites un contrôleur d'affichage dans l'interface Constructeur, et ajoutez une vue, puis liez cette vue en code Votre propriété ne doit pas être forte, car elle est déjà conservée par l'une des vues. p>
Vous devez modifier ces propriétés à p>
"Ils sont retenus par le contrôleur d'affichage du scénario" i> Ce n'est pas correct. Les points de vente peuvent être faibles car ils sont des sous-visions de quelque chose et une vue superview conserve une référence forte à ses sous-espoirs.
Vous créez un objet en même temps que vous l'attribuez à une propriété faible. À ce stade, rien n'a une forte référence à cela, de sorte que les règles de l'arc devraient être immédiatement nulsées. (Note que lorsque vous utilisez des constructions de débogage, cela ne se produit pas immédiatement). p>
Lors du chargement à partir du storyboard, l'objet est créé, ajouté en tant que sous-View et puis em> attribué à la prise. Le superview a une référence forte, donc c'est bien. p>
Pour refléter ce comportement sans changer votre type de propriété de sortie (cependant pour être honnête, il n'y a pas beaucoup de mal à cela) Vous devez affecter votre nouvel objet à une variable locale, puis l'ajouter à une vue, puis attribuez-la à la propriété de sortie. p>
Ok merci, je pense que je vais changer l'attribut de la propriété pour l'instant :)
@interface SuggestingTableViewCell : UITableViewCell @property (nonatomic, weak) IBOutlet SuggestedSeriesView *seriesOne; @end cellIdentifier = suggestionCell; SuggestingTableViewCell *suggesting = (SuggestingTableViewCell *)[tableView dequeueReusableCellWithIdentifier:suggestionCell]; Series *ser1 = series[0]; SuggestedSeriesView * strongSeriesOne = [[SuggestedSeriesView alloc] initWithFrame:suggesting.seriesOne.bounds andSeriesData:@{JV_SERIES_IMAGE_URL : ser1.imageURL, JV_SERIES_TITLE : ser1.title}]; suggesting.seriesOne = strongSeriesOne;
Non, ce n'est pas et c'est exactement le point. Le retenue ne se produit pas parce que des choses sont
iboutlet code> mais parce que des choses sont
fort code>.