AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Immer Ärger mit ARC

Ein Thema von Ookami · begonnen am 24. Okt 2014 · letzter Beitrag vom 30. Okt 2014
 
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

Immer Ärger mit ARC

  Alt 24. Okt 2014, 18:05
Hallo zusammen,

ich habe in den vergangenen Tagen einen Thread geöffnet und bin in meiner Unwissenheit von einer falschen Idee ausgegangen.
Jetzt will ich's nochmal neu angehen und frage hier mal in die Landschaft, ob sich einer aufopfert, mir an der Stelle zu helfen.

Ich wollte schön sauber getrennt ein Programm entwerfen, erst mal nur als Test, um zu sehen, wie es läuft (nun, es lief nicht) und habe dies nun entschlankt und nochmal probiert.

Die Fehlermeldung ist dieselbe wie immer, ist auch unten als Screenshot angehängt.

Im AVD lässt sich das als App aufrufen, der Compiler meldet keinen Fehler. Im Debug-Modus zeigt mir das ganze schon im "program"-Teil Main ab "Presenter := TPresenter.Create(View, Model);",
dass View= NIL ist.
Ich gehe jetzt mal davon aus, das Stevie recht hat siehe:
Zitat:
Generell sei aber gesagt, dass viele Fehler bei Code, der unter Windows läuft aber auf Android/iOS nicht, in der unterschiedlichen Handhabung von Objekten zu suchen sind.
Auf den mobilen Geräten wird dort ARC genutzt - also Objekte werden genauso referenzgezählt, wie Interfaces.
ich aber auf der anderen Seite nicht wirklich weiß, wie das dann zu beheben ist.

Ich habe jetzt einfach mal den gesamten Quellcode reingesteckt, dann wird's zwar viel, aber letztlich klar. - Denke ich

Das Programm
Code:
program AppTwo;

uses
  System.StartUpCopy,
  FMX.MobilePreview,
  FMX.Forms,
  Viewer in 'Viewer.pas' {View},
  MBPresenter in 'MBPresenter.pas',
  MBModel in 'MBModel.pas',
  MBInterface in 'MBInterface.pas';

{$R *.res}

Procedure Main;
Var      Model    : IMyInterfaceModel;
          View     : TView;
          Presenter : TPresenter;
Begin
     Application.CreateForm(TView, View);
     Model := TModel.Create;
     Presenter := TPresenter.Create(View, Model);

     try
        Application.Run;
     finally
        Presenter.Free;
        Model._Release;
     end;
End;


begin
     Application.Initialize;
     Main;
end.

Die View
Code:
unit Viewer;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, MBInterface,
  FMX.Objects;

type
  TView = class(TForm, IMyInterfaceView)
    Text1: TText;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure SetHelloWorld (Value : String);
  end;

var
  View: TView;

implementation

{$R *.fmx}

Procedure TView.SetHelloWorld (Value : String);
Begin
     Text1.Text := Value;
End;

end.

Der Presenter
Code:
unit MBPresenter;

interface

uses    System.SysUtils, MBInterface;

Type    TPresenter                   = Class
           fView                      : IMyInterfaceView;
           fModel                     : IMyInterfaceModel;
          public
           constructor Create(const View: IMyInterfaceView; const Model: IMyInterfaceModel);
         End;

implementation


constructor TPresenter.Create(const View: IMyInterfaceView; const Model: IMyInterfaceModel);
Begin
     if not Assigned( View ) then
       raise System.SysUtils.EArgumentNilException.Create( 'View' );
     if not Assigned( Model ) then
       raise System.SysUtils.EArgumentNilException.Create( 'Model' );

     fView := View;
     fModel := Model;

     fView.SetHelloWorld(fModel.getHelloWorld);
End;

end.

Das Model
Code:
unit MBModel;

interface

uses    MBInterface;

Type    TModel                       = Class(TInterfacedObject, IMyInterfaceModel)
           fHelloWorld                : String;
           public
           constructor create;
           published
           Function getHelloWorld     : String;
         End;


implementation


constructor TModel.create;
begin
     fHelloWorld := 'Hello World';
end;
Function TModel.getHelloWorld : String;
begin
     Result := fHelloWorld;
end;

end.

Das Interface
Code:
unit MBInterface;

interface

Type    IMyInterfaceModel            = Interface(IInterface)
         ['{80AC074A-7D51-49F2-B94D-2716B9CBA938}']
           Function getHelloWorld     : String;
         End;


Type    IMyInterfaceView             = Interface(IInterface)
         ['{D550D27A-57CA-4AAE-809E-60417E7E7DDC}']
           Procedure SetHelloWorld (Value : String);
         End;


implementation

end.
Angehängte Grafiken
Dateityp: png Exception.PNG (8,2 KB, 15x aufgerufen)
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz